Sch.Sig
module type FUNCTOR = sig ... end
type ('a, 't) app
type 'f applicative = {
pure : 'a. 'a -> ('a, 'f) app;
map : 'a 'b. ('a -> 'b) -> ('a, 'f) app -> ('b, 'f) app;
apply : 'a 'b. ('a -> 'b, 'f) app -> ('a, 'f) app -> ('b, 'f) app;
}
type ('f, 'g) nat = {
run : 'a. ('a, 'f) app -> ('a, 'g) app;
module Common : sig ... end
module Make (T : FUNCTOR) : sig ... end