sig type 'a t = 'a option val fmap : ('-> 'b) -> 'a t -> 'b t end