Skip to content

Confusing type error behaviour

Compile this example with GHC 7.8.3.

module Foo where

broken :: [Int]
broken = ()

ambiguous :: a -> String
ambiguous _ = show 0

You get

Foo.hs:4:10:
    Couldn't match expected type ‘[Int]’ with actual type ‘()’
    In the expression: ()
    In an equation for ‘broken’: broken = ()

Foo.hs:7:15:
    No instance for (Show a0) arising from a use of ‘show’
    The type variable ‘a0’ is ambiguous

(and a similar ambiguous (Num a0) error).

But if you comment out broken, the program compiles, using the defaulting rules to choose a0 = Integer.

This is obviously wrong.

Reported by Evan Laforge.

Edited by Simon Peyton Jones
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information