data T = A { foo :: Int } 
       | B { bar :: String }
Fallunterscheidung:
f :: T -> Int
f x = case x of
    A {} -> foo x
    B {} -> length $ bar x
Pattern Matching (Bezeichner f, b werden lokal gebunden):
f :: T -> Int
f x = case x of
    A { foo = f } -> f
    B { bar = b } -> length b