type 'a t
val return : 'a -> 'a t
type ('a, 'b) ft = 'a -> 'b
val fmap : ('a, 'b) ft -> 'a t -> 'b t
type 'a tlist
val nil : unit -> 'a tlistval singleton : 'a t -> 'a tlistval cons : 'a t -> 'a tlist -> 'a tlistval append : 'a tlist -> 'a tlist -> 'a tlistval map : ('a, 'b) ft -> 'a tlist -> 'b tlist