
#10281: Type error with Rank-n-types -------------------------------------+------------------------------------- Reporter: rhjl | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 7.10.1 checker) | Keywords: Resolution: | Architecture: Operating System: Unknown/Multiple | Unknown/Multiple Type of failure: GHC rejects | Test Case: valid program | Peirce_eq_LEM.hs Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by rhjl): I just confirmed that the issue persists in version 7.10.1; additionally, the following code, also part of the attached file, now produces an error. {{{#!hs type DNE = ∀ 𝑎. Not (Not 𝑎) → 𝑎 peirce_implies_dne ∷ Peirce → DNE peirce_implies_dne peirce = \dn → peirce dn }}} The error is: {{{ 67:42: Couldn't match type ‘𝑏0’ with ‘𝑎1’ because type variable ‘𝑎1’ would escape its scope This (rigid, skolem) type variable is bound by a type expected by the context: 𝑎 -> 𝑎1 at Peirce_eq_LEM.hs:67:42-43 Expected type: (𝑎 -> 𝑏0) -> 𝑎 Actual type: Not 𝑎 -> 𝑎 In the first argument of ‘peirce’, namely ‘dn’ In the expression: peirce dn }}} This seems less confusing than the error in the original report; nevertheless I found it curious, because it is new in version 7.10.1, and because the expression naively unifies to the correct type. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10281#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler