[Haskell-cafe] (no subject)
Claus Reinke
claus.reinke at talk21.com
Sun May 31 06:56:33 EDT 2009
>> ------------------------------------------
>> type F a = Int
>>
>> class A a where
>> foo :: A b => a (F b)
>> ------------------------------------------
>>
>> GHC - OK
>> Hugs - Illegal type "F b" in constructor application
>
> This time, I'd say Hugs is wrong (though eliminating that initial
> complaint leads back to an ambiguous and unusable method 'foo').
I only just recognized the horrible error message from the first
example.. what Hugs is trying to tell us about is a kind error!
The kind of 'a' in 'F' defaults to '*', but in 'A', 'F' is applied to
'b', which, via 'A b' is constrained to '*->*'. So Hugs is quite
right (I should have known!-).
The error message can be improved drastically, btw:
:set +k
ERROR file:.\hugs-vs-ghc.hs:19 - Kind error in constructor application
*** expression : F b
*** constructor : b
*** kind : a -> b
*** does not match : *
See http://cvs.haskell.org/Hugs/pages/hugsman/started.html and
search for '+k' - highly recommended if you're investigating kinds.
Claus
More information about the Haskell-Cafe
mailing list