123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179(** Minimum monad signature with an additional type parameter ['z] *)moduletypeS2=sigtype(+'a,'z)tvalreturn:'a->('a,'z)tvalbind:('a,'z)t->('a->('b,'z)t)->('b,'z)tend(** Infix name space for [S2] *)moduletypeInfix2=sigtype(+'a,'z)tval(>>=):('a,'z)t->('a->('b,'z)t)->('b,'z)t(** synonym of [bind] *)val(>>|):('a,'z)t->('a->'b)->('b,'z)t(** synonum of [fmap], with the flipped arguments *)val(>|=):('a,'z)t->('a->'b)->('b,'z)t(** synonum of [fmap], with the flipped arguments *)(** Applicative style binops *)val(^<$>):('a->'b)->('a,'z)t->('b,'z)t(** same as map, <$> in Haskell *)val(/<*>):('a->'b,'z)t->('a,'z)t->('b,'z)t(** <*> in Haskell *)end(** syntax for [S2] *)moduletypeSyntax2=sigtype(+'a,'z)tval(let*):('a,'z)t->('a->('b,'z)t)->('b,'z)t(** synonym of [bind] *)val(let+):('a,'z)t->('a->'b)->('b,'z)t(** synonum of [fmap], with the flipped arguments *)val(and*):('a,'z)t->('b,'z)t->('a*'b,'z)tval(and+):('a,'z)t->('b,'z)t->('a*'b,'z)tend(** The final unified Monad API for [S2] *)moduletypeT2=sigtype(+'a,'z)tvalreturn:'a->('a,'z)tvalbind:('a,'z)t->('a->('b,'z)t)->('b,'z)tvalfmap:('a->'b)->('a,'z)t->('b,'z)t(** fmap in Haskell *)valliftM:('a->'b)->('a,'z)t->('b,'z)t(** Synonym of [fmap] *)valfmap2:('a->'b->'c)->('a,'z)t->('b,'z)t->('c,'z)t(** fmap2 in Haskell *)valliftM2:('a->'b->'c)->('a,'z)t->('b,'z)t->('c,'z)t(** synonym of [fmap2] in Haskell *)valvoid:('a,'z)t->(unit,'z)tvalseq:('a,'z)tlist->('alist,'z)t(** sequence in Haskell. Not tail recursive. *)valseq_:(unit,'z)tlist->(unit,'z)t(** sequence_ in Haskell. Not tail recursive. *)valmapM:('a->('b,'z)t)->'alist->('blist,'z)t(** Not tail recursive by default *)valmapM_:('a->(unit,'z)t)->'alist->(unit,'z)t(** Not tail recursive by default *)valiteri:(int->'a->(unit,'z)t)->'alist->(unit,'z)t(** Iteration with index starting from [0]. Not tail recursive by default. *)valfor_:int->int->(int->(unit,'z)t)->(unit,'z)t(** for like iteration. Not tail recursive by default *)valjoin:(('a,'z)t,'z)t->('a,'z)tvalprod:('a,'z)t->('b,'z)t->('a*'b,'z)tendmoduletypeS1=sigtype+'atvalreturn:'a->'atvalbind:'at->('a->'bt)->'btend(** syntax for [S1] *)moduletypeSyntax1=sigtype+'atval(let*):'at->('a->'bt)->'bt(** synonym of [bind] *)val(let+):'at->('a->'b)->'bt(** synonum of [fmap], with the flipped arguments *)val(and*):'at->'bt->('a*'b)tval(and+):'at->'bt->('a*'b)tend(** Infix name space for [S1] *)moduletypeInfix1=sigtype+'atval(>>=):'at->('a->'bt)->'bt(** synonym of [bind] *)val(>>|):'at->('a->'b)->'bt(** synonum of [fmap], with the flipped arguments *)val(>|=):'at->('a->'b)->'bt(** synonum of [fmap], with the flipped arguments *)(** Applicative style binops *)val(^<$>):('a->'b)->'at->'bt(** same as map, <$> in Haskell *)val(/<*>):('a->'b)t->'at->'bt(** <*> in Haskell *)end(** The final unified Monad API for [S1] *)moduletypeT1=sigtype+'atvalreturn:'a->'atvalbind:'at->('a->'bt)->'btvalfmap:('a->'b)->'at->'bt(** fmap in Haskell *)valliftM:('a->'b)->'at->'bt(** synonym of [fmap] *)valfmap2:('a->'b->'c)->'at->'bt->'ct(** fmap2 in Haskell *)valliftM2:('a->'b->'c)->'at->'bt->'ct(** synonym of [fmap2] *)valvoid:'at->unittvalseq:'atlist->'alistt(** sequence in Haskell. Not tail recursive. *)valseq_:unittlist->unitt(** sequence_ in Haskell. Not tail recursive. *)valmapM:('a->'bt)->'alist->'blistt(** Not tail recursive by default *)valmapM_:('a->unitt)->'alist->unitt(** Not tail recursive by default *)valiteri:(int->'a->unitt)->'alist->unitt(** Iteration with index starting from [0]. Not tail recursive by default *)valfor_:int->int->(int->unitt)->unitt(** for like iteration. Not tail recursive by default *)valjoin:'att->'atendmoduletypeS=S1moduletypeT=T1moduletypeInfix=Infix1moduletypeSyntax=Syntax1