[Haskell-cafe] Inference for RankNTypes
Francesco Mazzoli
f at mazzo.li
Wed Jan 2 14:21:55 CET 2013
At Wed, 2 Jan 2013 14:49:51 +0200,
Roman Cheplyaka wrote:
> I don't see how this is relevant.
Well, moving `flip one' in a let solves the problem, and The fact that let-bound
variables are treated differently probably has a play here. I originally
thought that this was because the quantifications will be all to the left in the
let-bound variable while without a let-bound variable the types are used
directly. However this doesn’t explain the behaviour I’m seeing.
> GHC correctly infers the type of "flip one 'x'":
>
> *Main> :t flip one 'x'
> flip one 'x' :: (forall a. a -> a) -> Char
>
> But then somehow it fails to apply this to id. And there are no bound
> variables here that we should need to annotate.
Right. The weirdest thing is that annotating `flip one' (as in `three' in my
code) or indeed `flip one 'x'' with the type that shows up in ghci makes
things work:
five = (flip one 'x' :: (forall a. a -> a) -> Char) id
Francesco
More information about the Haskell-Cafe
mailing list