# Functor Set_lang_intf.S_lang.Make_monadic_eval

    module Make_monadic_eval: functor (M : Core.Std.Monad.S) -> Set_lang_intf.S_eval
        with type 'base t := 'base t
        with type set := set
        with type 'a result := 'a M.t

Parameters:

`M` | : | `Core.Std.Monad.S`

    type 'base t

    type set

    type 'a result

    val subst : 'b1 t ->
           f:('b1 -> 'b2 t result) ->
           'b2 t result

    val map : 'b1 t ->
           f:('b1 -> 'b2 result) ->
           'b2 t result

    val specialize : 'b t ->
           f:('b -> set option result) ->
           'b t result

    val eval : 'b t ->
           f:('b -> set result) ->
           set result