Haskell Language Basic examples


λ> :t 1
1 :: Num t => t

λ> :t pi
pi :: Floating a => a

In the examples above, the type-checker infers a type-class rather than a concrete type for the two constants. In Haskell, the Num class is the most general numerical one (since it encompasses integers and reals), but pi must belong to a more specialized class, since it has a nonzero fractional part.

list0 :: [Integer]
list0 = [1, 2, 3]

list1 :: [Double]
list1 = [1, 2, pi]

The concrete types above were inferred by GHC. More general types like list0 :: Num a => [a] would have worked, but would have also been harder to preserve (e.g. if one consed a Double onto a list of Nums), due to the caveats shown above.