eigentlich:
data List a = Nil {}
| Cons { head :: a, tail :: List a }
aber aus historischen Gründen:
List a = [a], Nil = [], Cons = (:)
data [a] = [] | (:) { head :: a, tail :: [a] }
Pattern matching dafür:
length :: [a] -> Int
length l = case l of
[] -> 0
x : xs -> ...