
G'day. Quoting nickgrey@softhome.net:
This is the kind of thing I'd like to do, but I can't see how to do it. (Not that I'm claiming it's impossible, I'd played with Haskell on and off for a couple of years now, but I'm a long way from being an expert.)
class StoreableFunc1 a where store :: a -> String unstore :: String -> a apply :: ?? -- What type here??
How about this? class StorableThing thing f | thing -> f where store :: thing -> String unstore :: String -> thing retrieve :: thing -> f Then you can say, for example: data IdFunction = IdFunction instance StorableThing IdFunction (forall a. a -> a) where store _ = "IdFunction" unstore _ = IdFunction retrieve _ = id Note that you're still going to have problems with unstoring these beasts. How to do this is left as an exercise. (Clue: Existential types may help you a lot.) Cheers, Andrew Bromage