On Tue, 8 May 2007, David House wrote:
On 08/05/07, Matthew Sackman <[EMAIL PROTECTED]> 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: [EMAIL PROTECTED]
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe