functor (X : S) ->
sig
type ('f, 'r) t
val nil : ('r, 'r) t
val cons : 'a X.t -> ('f, 'r) t -> ('a -> 'f, 'r) t
val ( @> ) : 'a X.t -> ('f, 'r) t -> ('a -> 'f, 'r) t
val step : ('f1, 'r) t -> f:('f2 -> 'f1) -> ('f2, 'r) t
val mapN : f:'f -> ('f, 'r) t -> 'r X.t
val applyN : 'f X.t -> ('f, 'r) t -> 'r X.t
end