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 di
A simple reason why they are called algebraic; there are both sum (logical disjunction) and product (logical conjunction) types. A sum type is a discriminated union, e.g:
data Bool = False | True
A product type is a type with multiple parameters:
data Pair a b = Pair a b
In O'Caml "product" is made more explicit:
type 'a 'b pair = Pair of 'a * 'b