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)