Skip to content

Regression in type inference with RankNTypes

Consider the following code:

{-# LANGUAGE RankNTypes #-}
module Test where

foo :: ((forall a.f a) -> f r) -> f r
foo g = undefined

In GHC 7.10.3:

*Main> :t \g -> foo g
\g -> foo g :: ((forall a. f a) -> f r) -> f r

In GHC 8.0.1:

*Main> :t \g -> foo g

<interactive>:1:11: error:
    • Couldn't match expected type ‘(forall a. f a) -> f r’
                  with actual type ‘t’
      ‘t’ is a rigid type variable bound by
        the inferred type of it :: t -> f r at <interactive>:1:1
    • In the first argument of ‘foo’, namely ‘g’
      In the expression: foo g
      In the expression: \ g -> foo g
    • Relevant bindings include g :: t (bound at <interactive>:1:2)
Edited by slindley
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information