Type of empty list
From HaskellWiki
1 Question
Why is
([]::[Int]) == ([]::[Char])
True
False
Related question: Why is
map :: (a -> b) -> [a] -> [b] map f (x:xs) = f x : map f xs map f xs@[] = xs
a type error and the case definition
map f [] = []
is not?
2 Answer
For an empty list it may seem silly to talk about the types of its elements, since it has no elements. However when you prepend new elements to the empty list it is important what elements are allowed.
E.g.2 : ([]::String)
Lists can be defined by
data [a] = a : [a] | []
[]
a
There are types, where none of the constructors refers to the type parameter and these types are very useful, e.g. for defining numbers with type-checked physical dimensions. For details refer to "phantom types".
