sig
module T :
sig
type 'f monad = {
return : 'a. 'a -> ('a, 'f) Generic_util.App.T.app;
bind :
'a 'b.
('a, 'f) Generic_util.App.T.app ->
('a -> ('b, 'f) Generic_util.App.T.app) ->
('b, 'f) Generic_util.App.T.app;
}
end
type 'f monad =
'f Generic_util_monad.T.monad = {
return : 'a. 'a -> ('a, 'f) Generic_util.App.T.app;
bind :
'a 'b.
('a, 'f) Generic_util.App.T.app ->
('a -> ('b, 'f) Generic_util.App.T.app) ->
('b, 'f) Generic_util.App.T.app;
}
type 'f t = 'f Generic_util_monad.monad
val fun_of_mon :
'a Generic_util_monad.monad -> 'a Generic_util.Functor.T.functorial
val app_of_mon :
'a Generic_util_monad.monad -> 'a Generic_util.Applicative.T.applicative
val join :
'a Generic_util_monad.monad ->
(('b, 'a) Generic_util.App.T.app, 'a) Generic_util.App.T.app ->
('b, 'a) Generic_util.App.T.app
val liftM :
'a Generic_util_monad.monad ->
('b -> 'c) ->
('b, 'a) Generic_util.App.T.app -> ('c, 'a) Generic_util.App.T.app
val liftM2 :
'a Generic_util_monad.monad ->
('b -> 'c -> 'd) ->
('b, 'a) Generic_util.App.T.app ->
('c, 'a) Generic_util.App.T.app -> ('d, 'a) Generic_util.App.T.app
val liftM3 :
'a Generic_util_monad.monad ->
('b -> 'c -> 'd -> 'e) ->
('b, 'a) Generic_util.App.T.app ->
('c, 'a) Generic_util.App.T.app ->
('d, 'a) Generic_util.App.T.app -> ('e, 'a) Generic_util.App.T.app
val liftM4 :
'a Generic_util_monad.monad ->
('b -> 'c -> 'd -> 'e -> 'f) ->
('b, 'a) Generic_util.App.T.app ->
('c, 'a) Generic_util.App.T.app ->
('d, 'a) Generic_util.App.T.app ->
('e, 'a) Generic_util.App.T.app -> ('f, 'a) Generic_util.App.T.app
val traverseM :
'f Generic_util_monad.monad ->
('a -> ('b, 'f) Generic_util.App.T.app) ->
'a list -> ('b list, 'f) Generic_util.App.T.app
val sequenceM :
'f Generic_util_monad.monad ->
('a, 'f) Generic_util.App.T.app list ->
('a list, 'f) Generic_util.App.T.app
val id : Generic_util.App.id Generic_util_monad.monad
val option : Generic_util.App.option' Generic_util_monad.monad
val list : Generic_util.App.list' Generic_util_monad.monad
module State :
sig
type 'b state = STATE
type (_, _) Generic_util.App.T.app +=
State :
('b -> 'a * 'b) -> ('a, 'b Generic_util_monad.State.state)
Generic_util.App.T.app
val run_state :
('a, 'b Generic_util_monad.State.state) Generic_util.App.T.app ->
'b -> 'a * 'b
val state : 'a Generic_util_monad.State.state Generic_util_monad.monad
val get :
('a, 'a Generic_util_monad.State.state) Generic_util.App.T.app
val put :
'a ->
(unit, 'a Generic_util_monad.State.state) Generic_util.App.T.app
end
module Reader :
sig
type 'b reader = READER
type (_, _) Generic_util.App.T.app +=
Reader :
('b -> 'a) -> ('a, 'b Generic_util_monad.Reader.reader)
Generic_util.App.T.app
val run_reader :
('a, 'b Generic_util_monad.Reader.reader) Generic_util.App.T.app ->
'b -> 'a
val reader :
'a Generic_util_monad.Reader.reader Generic_util_monad.monad
val ask :
('a, 'a Generic_util_monad.Reader.reader) Generic_util.App.T.app
val local :
('a -> 'b) ->
('c, 'b Generic_util_monad.Reader.reader) Generic_util.App.T.app ->
('c, 'a Generic_util_monad.Reader.reader) Generic_util.App.T.app
end
module IO :
sig
type io = IO_
type (_, _) Generic_util.App.T.app +=
IO :
(unit -> 'a) -> ('a, Generic_util_monad.IO.io)
Generic_util.App.T.app
val embed_io :
(unit -> 'a) -> ('a, Generic_util_monad.IO.io) Generic_util.App.T.app
val run_io :
('a, Generic_util_monad.IO.io) Generic_util.App.T.app -> 'a
val io : Generic_util_monad.IO.io Generic_util_monad.monad
end
end