Up
### Signature

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.

The `map`

argument to `Applicative.Make`

says how to implement the applicative's
`map`

function. ``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.