Module Evd.MonadRSource

include Monad.Def with type +'a t = evar_map -> evar_map * 'a
Sourcetype +'a t = evar_map -> evar_map * 'a
Sourceval return : 'a -> 'a t
Sourceval (>>=) : 'a t -> ('a -> 'b t) -> 'b t
Sourceval (>>) : unit t -> 'a t -> 'a t
Sourceval map : ('a -> 'b) -> 'a t -> 'b t

The monadic laws must hold:

  • (x>>=f)>>=g = x>>=fun x' -> (f x'>>=g)
  • return a >>= f = f a
  • x>>=return = x

As well as the following identities:

  • x >> y = x >>= fun () -> y
  • map f x = x >>= fun x' -> f x'
Sourcemodule List : Monad.ListS with type 'a t := 'a t