module type S_eval =sig..end
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