[Haskell-cafe] Vanishing polymorphism

Tom Schrijvers Tom.Schrijvers at cs.kuleuven.be
Wed May 9 03:30:29 EDT 2007


On Tue, 8 May 2007, David House wrote:

> On 08/05/07, Matthew Sackman <matthew at wellquite.org> wrote:
>> > :t let f r s = (return negate) >>= (\(fn::forall n . (Num n) => n -> n) 
>> -> return (fn r, fn s)) in f
>> 
>> <interactive>:1:35:
>>     Couldn't match expected type `a -> a'
>>            against inferred type `forall n. (Num n) => n -> n'
>>     In the pattern: fn :: forall n. (Num n) => n -> n
>>     In a lambda abstraction:
>>         \ (fn :: forall n. (Num n) => n -> n) -> return (fn r, fn s)
>>     In the second argument of `(>>=)', namely
>>         `(\ (fn :: forall n. (Num n) => n -> n) -> return (fn r, fn s))'
>> 
>> I.e. why does the polymorphism get destroyed?
>
> Here fn is bound by a lambda abstraction, and is therefore
> monomorphic. I can't find anything in the Report about that,

This won't be in the Haskell 98 report. I have to enable -fglasgow-exts in 
GHCi to get this even parsed.

Tom


--
Tom Schrijvers

Department of Computer Science
K.U. Leuven
Celestijnenlaan 200A
B-3001 Heverlee
Belgium

tel: +32 16 327544
e-mail: tom.schrijvers at cs.kuleuven.be


More information about the Haskell-Cafe mailing list