overzealous defaulting?

Tomasz Zielonka t.zielonka at students.mimuw.edu.pl
Mon Aug 23 12:49:23 EDT 2004

On Mon, Aug 23, 2004 at 05:14:32PM +0100, Simon Peyton-Jones wrote:
> The binding
> 	let t = printQ
> falls under the monomorphism restriction.  The Haskell Report would not
> default (Show a), so you might think you'd get an "ambiguous type
> variable" error.  But it's so annoying to get this error for
> 	ghci> show []
> that GHCi is a bit more eager about defaulting ambiguous types: it'll
> apply defaulting if all the constrained classes are standard, and at
> least one of them is numeric *or* is Show, Eq or Ord.
> The *or* part is the non-standard bit.

I feel that it must be somewhat related to this behaviour:

    Prelude> :t show . read
    show . read :: String -> String
    Prelude> (show . read) " 13213 "
    Prelude> (show . read) " 0x10000 "
    Prelude> (show . read) " 10000.0 "
    "*** Exception: Prelude.read: no parse

For some reason GHC defaults to Integer, even when monomorphism
restriction doesn't come into play.

Hugs chooses this funny, but IMHO more correct, type:

    Prelude> :t show . read
    show . read :: (Read a, Show a) => [Char] -> [Char]

Best regards,

.signature: Too many levels of symbolic links

More information about the Glasgow-haskell-users mailing list