Algebraic data types are currently not well-known
outside of statically typed functional languages such as
OCaml,
Haskell,
Scala, amongst
others. The simplest way to think of them appears to be as a sort of
enumerated type,
where each case of the type can have associated data. Values of the types are inspected
via a language construct called
pattern matching,
which can essentially be thought of
as a much more powerful version of the
switch or
case construct found in languages such as C, Java,
Ada, and others. As underwhelming as this sounds, the combination of these types and
pattern matching allow for reducing what would be extremely complicated tasks in
other languages down to trivial symbol manipulation, and subsume vast parts
of the type systems in other languages.