What is the easiest way to name a combination of type classes, i.e., to abbreviate the fact that a certain type is an instance of several classes simultaneously? I have a vague sense that this is do-able, but that I am messing up by trying to use an empty class body as below.

So in the code below, I try to use FooBar to abbreviate the conjunction of Foo and Bar. But while f (which uses a FooBar constraint) has a valid definition, it can't be used. On the other hand, g (which uses the long-winded constraint), is both a valid defined and useable.

(In a real example, imagine that FooBar names a conjunction of a half dozen things, so that the g-like form really is onerous, whereas the f-like form would be sweet and tidy :) .)

  --  Fritz

-------------------

class Foo a where
  foo :: a -> Int

class Bar a where
  bar :: a -> a

class (Foo a, Bar a) => FooBar a

f :: FooBar a => a -> Int
f a = foo (bar a)

g :: (Foo a, Bar a) => a -> Int
g a = foo (bar a)

instance Foo Char where
  foo = ord

instance Bar Char where
  bar = id

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to