I'm sure there's a way to do this, but it's escaping me at present. I want to do something like this: data Foo = Bar a => Foo a Bool ... That is, I want to create a new type, Foo, whose constructor takes both a Boolean and a value of a type of class Bar.