What is the advance of using type classes? A function of the form

  f :: Show a => ...

really has an implicit argument

  f :: Show__Dict a -> ...

that the compiler infers for us. So, the advantage of type classes is one of convenience: we don't have to pass dictionaries around, or even figure out which dictionaries we need; the compiler does that for us. But if we have a type class of the form

  class Foo a where
    mkFoo :: IO FooToken
    otherFun1 :: FooToken -> ...
    otherFun2 :: FooToken -> ...

then this advantage is mostly lost; we still need to pass around an explicit FooToken object. In a case like this, I don't see the advantage of using a type class over using a data type

  data Foo = Foo { otherFun1 :: ... , otherFun2 :: ... }
  mkFoo :: .. -> Foo

There are exceptions; for instance, if you want to encode 'inheritance' in some way then type classes might still be useful; for instance, see the Gtk2Hs library, which uses this extensively. 

Edsko