Ambiguous types

Koen Claessen koen@cs.chalmers.se
Mon, 21 Jan 2002 10:15:21 +0100 (MET)


(moved reply to haskell-cafe)

Ashley Yakeley wrote:

 | But this gives an error:
 |
 |   emptyList :: (Ord a) => [a]
 |   emptyList = []
 |
 |   isempty :: Bool
 |   isempty = null emptyList

Here is another (very similar) case:

  emptyList :: [a]
  emptyList = []

  showEmptyList :: String
  showEmptyList = show emptyList

Now, you might argue that the type error resulting from this
program is too restrictive, since the empty list can always
be shown as: "[]".

But this is not true for all types, look at the way the
empty *string* is shown.

I.e. changing the type of `emptyList' in this example
changes the behavior of `showEmptyList'. The compiler does
not know what type to choose, and thus gives a type error.

/Koen.

--
Koen Claessen         http://www.cs.chalmers.se/~koen
phone:+46-31-772 5424      mailto:koen@cs.chalmers.se
-----------------------------------------------------
Chalmers University of Technology, Gothenburg, Sweden