val return : 'a -> 'a t
The following identities ought to hold for every Applicative (for some value of =):
return Fn.id <*> t = t
return Fn.compose <*> tf <*> tg <*> tx = tf <*> (tg <*> tx)
return f <*> return x = return (f x)
tf <*> return x = return (fun f -> f x) <*> tf
Note: <*> is the infix notation for apply.
map argument to
Applicative.Make says how to implement the applicative's
`Define_using_apply means to define
map t ~f = return f <*> t.
`Custom overrides the default implementation, presumably with something more efficient.
Some other functions returned by
Applicative.Make are defined in terms of
map, so passing in a more efficient
map will improve their efficiency as well.