
I also find this scary. Even this works: Prelude> let whee :: (Show a, Eq a, a) => Bool; whee x = x == x && null (show x) Prelude> :t whee whee :: (Eq a, Show a) => a -> Bool But: Prelude> let test :: (Eq a) => a => b => a; test = undefined <interactive>:35:13: Illegal polymorphic or qualified type: (b) => a Perhaps you intended to use -XRankNTypes or -XRank2Types In the type signature for `test': test :: Eq a => a => b => a Prelude> :set -XRankNTypes Prelude> let test :: (Eq a) => a => b => a; test = undefined <interactive>:8:13: Illegal constraint: b (Use -XConstraintKinds to permit this) In the type signature for `test': test :: Eq a => a => b => a So this is what I'd also expect for "a" to happen. I think this is a bug. Cheers, Andres -- Andres Löh, Haskell Consultant Well-Typed LLP, http://www.well-typed.com Registered in England & Wales, OC335890 250 Ice Wharf, 17 New Wharf Road, London N1 9RF, England