
#10390: Constraint order must match with RankNTypes -------------------------------------+------------------------------------- Reporter: crockeea | Owner: Type: bug | Status: new Priority: low | Milestone: Component: Compiler | Version: 7.8.4 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Blocked By: Test Case: | Related Tickets: Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- In the following code, GHC will not compile unless the constraints on the higher-rank function have the same *order* as the method declaration in `ApPair`. {{{#!hs {-# LANGUAGE RankNTypes #-} class ApPair r where apPair :: (forall a . (ApPair a, Num a) => Maybe a) -> Maybe r instance (ApPair a, ApPair b) => ApPair (a,b) where apPair = apPair' apPair' :: (ApPair b, ApPair c) => (forall a . (ApPair a, Num a) => Maybe a) -> Maybe (b,c) apPair' f = let (Just a) = apPair f (Just b) = apPair f in Just $ (a, b) }}} That is, the following does *not* compile: {{{#!hs apPair' :: (ApPair b, ApPair c) => (forall a . (Num a, ApPair a) => Maybe a) -> Maybe (b,c) apPair' f = let (Just a) = apPair f (Just b) = apPair f in Just $ (a, b) }}} GHC probably shouldn't care about lexical matching when checking constraints. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10390 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler