Skip to content

Are these really algebraic data types? #418

@JeffreyBenjaminBrown

Description

@JeffreyBenjaminBrown

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions