
#14288: ScopedTypeVariables with nested foralls broken since 8.0.2 -------------------------------------+------------------------------------- Reporter: MikolajKonarski | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 8.2.1 checker) | Resolution: | Keywords: Operating System: Linux | Architecture: x86_64 Type of failure: GHC rejects | (amd64) valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): OK. I tried out a similar example in Idris to see how it handles an example like `f4` from comment:14, and it turns out that Idris rejects it as well. So I'm now convinced that we shouldn't attempt to support examples like that. In light of this, what if we changed `foralls` from comment:7 to just this? * `foralls(forall a_1 ... a_k. T) = {a_1, ..., a_k} ∪ foralls (T)` * `foralls(C => T) = foralls(T)` That is, simply remove the `foralls(b -> c) = foralls(c)` case. This means that of these examples from comment:5: {{{#!hs f1 :: forall a. forall b. blah f2 :: forall a. a -> forall b. blah f3 :: forall a. Eq a => forall b. blah }}} Then in `f1` and `f3`, `a` and `b` will be lexically scoped, but in `f2`, only `a` will be lexically scoped. Does that sound agreeable? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14288#comment:15 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler