Parameter Make.1-X
val return : 'a -> 'a t
val apply : ('a -> 'b) t -> 'a t -> 'b t
The following identities ought to hold for every Applicative (for some value of =):
- identity:
return Fn.id <*> t = t
- composition:
return Fn.compose <*> tf <*> tg <*> tx = tf <*> (tg <*> tx)
- homomorphism:
return f <*> return x = return (f x)
- interchange:
tf <*> return x = return (fun f -> f x) <*> tf
Note: <*> is the infix notation for apply.
- identity:
val map : [ `Define_using_apply | `Custom of 'a t -> f:('a -> 'b) -> 'b t ]
The
map
argument toApplicative.Make
says how to implement the applicative'smap
function.`Define_using_apply
means to definemap 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 ofmap
, so passing in a more efficientmap
will improve their efficiency as well.