Module Sch.Sig

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