
#7888: Impredicativity flag needed more often ------------------------------------------------+--------------------------- Reporter: monoidal | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler (Type checker) | Version: 7.6.3 Resolution: fixed | Keywords: Os: Unknown/Multiple | Architecture: Unknown/Multiple Failure: Incorrect warning at compile-time | Difficulty: Unknown Testcase: typecheck/should_compile/T7888 | Blockedby: Blocking: | Related: ------------------------------------------------+--------------------------- Changes (by simonpj): * status: new => closed * difficulty: => Unknown * resolution: => fixed * testcase: => typecheck/should_compile/T7888 Comment: There really is a reason for this. The elaborated definition would be {{{ f :: forall b. (forall a. a) -> b = /\b. undefined @((forall a. a) -> b) }}} So we need to instantiate `undefined` at a polytype, which isn't usually allowed. But it is for `error` and there's no reason not to allow `undefined` too. See the commit comments above. Both for `error` and `undefined`, it's a bit of a hack. Simon -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7888#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler