...An algebra is a set of values, a set of operators that it is closed under and some laws it must obey. Each Fantasy Land algebra is a separate specification. An algebra may have dependencies on other algebras which must be implemented. "Value" is any JavaScript value, including any which have the structures defined below. "Equivalent" is an appropriate definition of equivalence for the given value. The definition should ensure that the two values can be safely swapped out in a program that respects abstractions. For example, two lists are equivalent if they are equivalent at all indices, two plain old JavaScript objects, interpreted as dictionaries, are equivalent when they are equivalent for all keys, two promises are equivalent when they yield equivalent values, etc.