Sorry for continuing to reply to myself. But all this seems fixed in 7.8.1: Prelude> let whee :: (Show a, Eq a, a) => Bool; whee x = x == x && null (show x) <interactive>:5:28: Expected a constraint, but 'a' has kind '*' In the type signature for 'whee': whee :: (Show a, Eq a, a) => Bool Prelude> let whee :: (Show a, Eq a) => a => Bool; whee x = x == x && null (show x) <interactive>:6:31: Expected a constraint, but 'a' has kind '*' In the type signature for 'whee': whee :: (Show a, Eq a) => a => Bool Cheers, Andres On Thu, Apr 10, 2014 at 8:37 PM, Andres Löh <andres@well-typed.com> wrote:
And even more:
Prelude> let test :: (Eq a, a, Eq b, b) => a; test = const Prelude> :t test test :: (Eq a, Eq b) => a -> b -> a Prelude> let test :: (Eq a, Eq b, a, b) => a; test = const Prelude> :t test test :: (Eq a, Eq b) => a -> b -> a Prelude> let test :: (a, b, Eq a, Eq b) => a; test = const
<interactive>:19:35: Predicate `a' used as a type In the type signature for `test': test :: (a, b, Eq a, Eq b) => a
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
-- 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