
Hi, in a module I am writing, I am using a 'StateT st IO' monad with a state like this: data MyState st = ST !Int !st My own monad is yet-another wrapper for ... another state monad. And that's getting inconvenient. So I wondered whether it would be good to define a class that unified all those StateTs into _one_ state, like:
class KnowsMyStuff a where foo :: a -> Int bar :: a -> Float etc :: a -> [String]
Then I could write my functions so that they'd work on any MonadIO which has some way of getting those instances defined. If I did that, how much performance would I lose? Accessing those values would probably require one more level of indirection, that can't be as fast as having a specific data type, right? Or is there some optimizer magic at work here? Peter P. S.: Right now the code is _very_ fast, and I'd rather have that than an convenient interface, that's why I ask.
participants (1)
-
Peter Simons