sig type 'f applicative = { pure : 'a. 'a -> ('a, 'f) Generic_util.App.T.app; apply : 'a 'b. ('a -> 'b, 'f) Generic_util.App.T.app -> ('a, 'f) Generic_util.App.T.app -> ('b, 'f) Generic_util.App.T.app; } end