type (_, _) aseq = | ANil : ('f, unit) aseq| ACons : ('a, 'f) Sig.app * ('f, 'u) aseq -> ('f, 'a * 'u) aseq
type ('f, 'y, 'z) continue = {cont : 'x. ('x -> 'y) -> ('f, 'x) aseq -> 'z;
}val rebase_aseq :
('f, 'u) aseq ->
('f, 'y, 'z) continue ->
('v -> 'u -> 'y) ->
('f, 'v) aseq ->
'ztype ('f, 'a) t = {fold : 'u 'y 'z. ('f, 'y, 'z) continue ->
('u -> 'a -> 'y) ->
('f, 'u) aseq ->
'z;
}val pure : 'a -> ('f, 'a) tval map : ('a -> 'b) -> ('f, 'a) t -> ('f, 'b) tval apply : ('f, 'a -> 'b) t -> ('f, 'a) t -> ('f, 'b) tval lift : ('a, 'f) Sig.app -> ('f, 'a) tval hoist : ('f, 'g) Sig.nat -> ('f, 'a) t -> ('g, 'a) t