Legend:
Library
Module
Module type
Parameter
Class
Class type
An interface for types that can be mapped over.
All you need to know to use this module effectively:
given type 'a t, function map : f:('a -> 'b) -> 'a t -> 'b t will mapf "over" t by taking a value of type 'a t to a value of type 'b
t.
E.g., if
type 'a t = int list
then
map ~f:Int.to_string : int t -> string t
is a function which maps int lists to string lists, so
map ~f:Int.to_string [1;2;3] = ["1";"2";"3"]
A Rough Sketch of the Category Theoretic Basis
To repeat, you don't need to read any of the following in order to make use of this module.
The use of the word functor in this context refers to the category theoretic concept of Functor, which is a map between categories. A functor F: C -> D that maps category C to category D consists of two mappings:
An "endofunctor" is a functor that is a map of one category within itself (or back onto itself).
We imagine a category CAML (analogous to Hask), where the objects are OCaml types and the arrows are functions between those types. S then specifies an interface for modules that implement an "endofunctor" on CAML, mapping types to types and functions to functions.
Law notes the laws that should be obeyed by any instantiation of Functor in the form of predicates that should be true for any arguments of the appropriate type.
Constructors
Module functors and signatures for expediting instantiation of Functors.