Parameter Make.1-X

type 'a t
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.

val map : [ `Define_using_apply | `Custom of 'a t -> f:('a -> 'b) -> 'b t ]

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.