[Haskell-cafe] Re: Well-typed functions with nonexisting signatures [Was: type variable question]

apfelmus at quantentunnel.de apfelmus at quantentunnel.de
Sat Dec 16 07:43:10 EST 2006


oleg at pobox.com wrote:
>> Is there a canonical example example that exhibits this behavior?
> Yes, it was discussed back in 2003. Here's the canonical form:
> 
> g::(Show a,Show b) => a->b
> g = undefined
> 
> --h :: Show a => b -> a
> h x = g(h x)
> 
> Both Hugs and GHC (in the pure Haskell98 mode!) are happy with h. 
> Both compilers infer the type for h, shown in the comment. If you give
> h the type signature -- the one that is inferred by the compilers
> themselves -- both compilers complain.

Strangely, ghci accepts it on the command line:

$ ghci
[...]
  GHC Interactive, version 6.4.2, for Haskell 98.
[...]
Prelude> let g :: (Show a, Show b) => a -> b; g = undefined; h :: Show a
=> b -> a; h x = g (h x) in h 1
*** Exception: Prelude.undefined

but not from a file to be loaded. Hugs +98 does not accept it on command
line as expected. What's going on?

Regards,
apfelmus



More information about the Haskell-Cafe mailing list