Haskell’s algebraic data types

Question :

Haskell’s algebraic data types,

Answer :

I’m trying to fully understand all of Haskell’s concepts.

In what ways are algebraic data types similar to generic types, e.g., in C# and Java? And how are they different? What’s so algebraic about them anyway?

I’m familiar with universal algebra and its rings and fields, but I only have a vague idea of how Haskell’s types work.


Haskell’s algebraic data types are named such since they correspond to an initial algebra in category theory, giving us some laws, some operations and some symbols to manipulate. We may even use algebraic notation for describing regular data structures, where:

  • + represents sum types (disjoint unions, e.g. Either).
  • • represents product types (e.g. structs or tuples)
  • X for the singleton type (e.g. data X a = X a)
  • 1 for the unit type ()
  • and μ for the least fixed point (e.g. recursive types), usually implicit.
Read More  When do you use the “this” keyword?

with some additional notation:

  • X² for X•X

In fact, you might say (following Brent Yorgey) that a Haskell data type is regular if it can be expressed in terms of 1, X, +, •, and a least ï¬xed point.

With this notation, we can concisely describe many regular data structures:

  • Units: data () = ()


  • Options: data Maybe a = Nothing | Just a

    1 + X

  • Lists: data [a] = [] | a : [a]

    L = 1+X•L

  • Binary trees: data BTree a = Empty | Node a (BTree a) (BTree a)

    B = 1 + X•B²

Other operations hold (taken from Brent Yorgey’s paper, listed in the references):

  • Expansion: unfolding the fix point can be helpful for thinking about lists. L = 1 + X + X² + X³ + ... (that is, lists are either empty, or they have one element, or two elements, or three, or …)
  • Composition, â—¦, given types F and G, the composition F â—¦ G is a type which builds “F-structures made out of G-structures†(e.g. R = X • (L â—¦ R) ,where L is lists, is a rose tree.
  • Differentiation, the derivative of a data type D (given as D’) is the type of D-structures with a single “holeâ€, that is, a distinguished location not containing any data. That amazingly satisfy the same rules as for differentiation in calculus:

    1′ = 0

    X′ = 1

    (F + G)′ = F' + G′

    (F • G)′ = F • G′ + F′ • G

    (F ◦ G)′ = (F′ ◦ G) • G′


  •  Oh My!, Brent A. Yorgey, Haskell’10, September 30, 2010, Baltimore, Maryland, USA
  •  Conor McBride POPL 2008

That’s the answer Haskell’s algebraic data types, Hope this helps those looking for an answer. Then we suggest to do a search for the next question and find the answer only on our site.

Disclaimer :

The answers provided above are only to be used to guide the learning process. The questions above are open-ended questions, meaning that many answers are not fixed as above. I hope this article can be useful, Thank you

Read More  What’s your opinion on using UUIDs as database row identifiers, particularly in web apps?