
#12557: Regression in type inference with RankNTypes -------------------------------------+------------------------------------- Reporter: slindley | Owner: Type: bug | Status: closed Priority: low | Milestone: Component: Compiler (Type | Version: 8.0.1 checker) | Keywords: Resolution: invalid | ImpredicativeTypes Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- @@ -4,1 +4,1 @@ - {-# LANGUAGE ImpredicativeTypes #-} + {-# LANGUAGE RankNTypes #-} New description: Consider the following code: {{{#!hs {-# 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) }}} -- Comment (by slindley): My example doesn't require `-XImpredicativeTypes` only `-XRankNTypes`! As I understand it the 'bug' in 7.10 was that it did infer polymorphic types for lambda-bound variables even with `-XImpredicativeTypes` disabled. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12557#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler