-
-
Notifications
You must be signed in to change notification settings - Fork 131
Description
Coconut's documentation for the data keyword states that it lets you create immutable ADTs. I see a nice concise language for creating immutable product types, but for it to truly offer an algebra, I believe[1] it would have to offer sum types.
The data keyword lets us multiply two types. For instance, we can multiply the int type with the string type by making a type T that has two fields, one of them an int and the other a string. In every instance of T both fields are mandatory.
If we could add the types int and string, it would mean we could create a new type T for which every instance could include either a string or an int, without including the other. That is, the type T would offer multiple constructors, which when called create instances of T with different fields.
Right?
[1] My understanding* of the term "algebra" is that it implies both addition and multiplication, and that for types, "multiplication" is the conjunction (and) operator, while "addition" is the disjunction (or) operator.
That interpretation seemed very weird to me until I noticed its implications for the size of the sets in question: If type A has 5 members and type B has 6, then their sum has 11 members, while their product has 30.
Sorry if I'm stating things you already know; I'm trying to keep a wide potential readership.