
#14939: Lint error in forall type -------------------------------------+------------------------------------- Reporter: Iceland_jack | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.5 Resolution: | Keywords: | StaticPointers Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj): The Lint error is this: {{{ In the type `forall (cls :: * -> Constraint) (b :: Alg cls *). b' Variable escape in forall: forall (cls :: * -> Constraint) (b :: Alg cls *). b }}} The complaint is because the kind of the body of the forall is `Alg cls *`, but the forall binds `cls` so it looks as if `cls` escapes. But actually it is fine because {{{ type Alg cls ob = ob }}} so `Alg cls *` is really just `*`, and the `cls` argument is not mentioned in the expansion. I conclude that the program is fine and it's Lint that is at fault. c.f. `TcUnify.occCheckExpand` and `CoreUtils.coreAltsType` which deal with the same problem. A single systematic solution eludes me. I worry that `Type.typeKind` suffers from the same problem, in the `ForAllTy` case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14939#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler