sig
module type Monad =
sig
type 'a t
val return : 'a -> 'a GapiMonad.Monad.t
val bind :
'a GapiMonad.Monad.t ->
('a -> 'b GapiMonad.Monad.t) -> 'b GapiMonad.Monad.t
end
module type MonadCombinators =
sig
type 'a m
module Infix :
sig
val ( >>= ) :
'a GapiMonad.MonadCombinators.m ->
('a -> 'b GapiMonad.MonadCombinators.m) ->
'b GapiMonad.MonadCombinators.m
val ( >> ) :
'a GapiMonad.MonadCombinators.m ->
'b GapiMonad.MonadCombinators.m ->
'b GapiMonad.MonadCombinators.m
end
val join :
'a GapiMonad.MonadCombinators.m GapiMonad.MonadCombinators.m ->
'a GapiMonad.MonadCombinators.m
val liftM :
('a -> 'b) ->
'a GapiMonad.MonadCombinators.m -> 'b GapiMonad.MonadCombinators.m
val liftM2 :
('a -> 'b -> 'c GapiMonad.MonadCombinators.m) ->
'a GapiMonad.MonadCombinators.m ->
'b GapiMonad.MonadCombinators.m -> 'c GapiMonad.MonadCombinators.m
val fmap :
('a -> 'b) ->
'a GapiMonad.MonadCombinators.m -> 'b GapiMonad.MonadCombinators.m
val sequence :
'a GapiMonad.MonadCombinators.m list ->
'a list GapiMonad.MonadCombinators.m
val sequence_ :
'a GapiMonad.MonadCombinators.m list ->
unit GapiMonad.MonadCombinators.m
val mapM :
('a -> 'b GapiMonad.MonadCombinators.m) ->
'a list -> 'b list GapiMonad.MonadCombinators.m
val mapM_ :
('a -> 'b GapiMonad.MonadCombinators.m) ->
'a list -> unit GapiMonad.MonadCombinators.m
val foldM :
('a -> 'b -> 'a GapiMonad.MonadCombinators.m) ->
'a -> 'b list -> 'a GapiMonad.MonadCombinators.m
end
module MakeMonadCombinators :
functor (M : Monad) ->
sig
type 'a m = 'a M.t
module Infix :
sig
val ( >>= ) : 'a m -> ('a -> 'b m) -> 'b m
val ( >> ) : 'a m -> 'b m -> 'b m
end
val join : 'a m m -> 'a m
val liftM : ('a -> 'b) -> 'a m -> 'b m
val liftM2 : ('a -> 'b -> 'c m) -> 'a m -> 'b m -> 'c m
val fmap : ('a -> 'b) -> 'a m -> 'b m
val sequence : 'a m list -> 'a list m
val sequence_ : 'a m list -> unit m
val mapM : ('a -> 'b m) -> 'a list -> 'b list m
val mapM_ : ('a -> 'b m) -> 'a list -> unit m
val foldM : ('a -> 'b -> 'a m) -> 'a -> 'b list -> 'a m
end
module type StateMonad =
sig
type 'a t
val return : 'a -> 'a t
val bind : 'a t -> ('a -> 'b t) -> 'b t
val get : 'a -> 'a * 'a
val put : 'a -> 'b -> unit * 'a
end
module MakeStateMonad :
functor (T : sig type s end) ->
sig
type 'a t = T.s -> 'a * T.s
val return : 'a -> 'a t
val bind : 'a t -> ('a -> 'b t) -> 'b t
val get : 'a -> 'a * 'a
val put : 'a -> 'b -> unit * 'a
end
module SessionM :
sig
type 'a t =
GapiConversation.Session.t -> 'a * GapiConversation.Session.t
val return : 'a -> 'a t
val bind : 'a t -> ('a -> 'b t) -> 'b t
val get : 'a -> 'a * 'a
val put : 'a -> 'b -> unit * 'a
type 'a m = 'a t
module Infix :
sig
val ( >>= ) : 'a m -> ('a -> 'b m) -> 'b m
val ( >> ) : 'a m -> 'b m -> 'b m
end
val join : 'a m m -> 'a m
val liftM : ('a -> 'b) -> 'a m -> 'b m
val liftM2 : ('a -> 'b -> 'c m) -> 'a m -> 'b m -> 'c m
val fmap : ('a -> 'b) -> 'a m -> 'b m
val sequence : 'a m list -> 'a list m
val sequence_ : 'a m list -> unit m
val mapM : ('a -> 'b m) -> 'a list -> 'b list m
val mapM_ : ('a -> 'b m) -> 'a list -> unit m
val foldM : ('a -> 'b -> 'a m) -> 'a -> 'b list -> 'a m
end
module type ListMonad =
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
module ListM :
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
type 'a m = 'a t
module Infix :
sig
val ( >>= ) : 'a m -> ('a -> 'b m) -> 'b m
val ( >> ) : 'a m -> 'b m -> 'b m
end
val join : 'a m m -> 'a m
val liftM : ('a -> 'b) -> 'a m -> 'b m
val liftM2 : ('a -> 'b -> 'c m) -> 'a m -> 'b m -> 'c m
val fmap : ('a -> 'b) -> 'a m -> 'b m
val sequence : 'a m list -> 'a list m
val sequence_ : 'a m list -> unit m
val mapM : ('a -> 'b m) -> 'a list -> 'b list m
val mapM_ : ('a -> 'b m) -> 'a list -> unit m
val foldM : ('a -> 'b -> 'a m) -> 'a -> 'b list -> 'a m
end
end