sig val general : ('a -> 'b) -> 'a -> 'b val ident : ?equal:('a -> 'a -> bool) -> ('a -> 'b) -> 'a -> 'b val unit : (unit -> 'a) -> unit -> 'a end