functor (M : Core.Std.Monad.S->
  sig
    val subst : 'b1 t -> f:('b1 -> 'b2 t M.t) -> 'b2 t M.t
    val map : 'b1 t -> f:('b1 -> 'b2 M.t) -> 'b2 t M.t
    val specialize : 'b t -> f:('-> set option M.t) -> 'b t M.t
    val eval : 'b t -> f:('-> set M.t) -> set M.t
  end