sig type 'a t = 'a list val return : 'a -> 'a t val bind : 'a t -> ('a -> 'b t) -> 'b t val mzero : 'a t val mplus : 'a t -> 'a t -> 'a t val guard : bool -> unit t end