FantasyLand JavaScript specification

The FantasyLand project specifies interoperability of common algebraic structures:

Each data type in the hierarchical diagram is called an algebraic data type because each consists of algebra, that is, a set of values, a set of operators that it is closed under, and the rules it must obey.

Let's take a simple example, the Setoid.