Oops [Fwd: Re: Allowing duplicate instances in GHC 6.4]

Robert van Herk rherk at cs.uu.nl
Thu Mar 31 10:20:08 EST 2005

> See change above!
> Also note type of fundep for Datasource should now be:
> class Datasource s k v | s -> k v where ...
I see.... But the cool thing was, that my datasources were generic, in 
the sence that they could store multiple k's and v's. Now, they would be 
unique for the actual storage mechanism used, meaning, for example, that 
I could only read values from 1 table, if I'd instantiate the datasource 
for a database coupling.

Currently, I use the Boilerplate approach to make it possible to store 
multiple types in one datasource, for example:

data MyKeyVal = IntXString Int String
             | FloatXInt  Float Int
             deriving (Eq, Ord, Show)

Furthermore, I generate an instance of KeyHasValue, to tell my framework 
which keys are valid for a datasource, for example:

instance KeyHasValue MyKeyVal Int String where
 constructor = IntXString
instance KeyHasValue MyKeyVal Float Int where
 constructor = FloatXInt

I have an instance
instance (..., KeyHasValue a k v) =>
 Datasource [a] k v where ...

This way, I can read Ints from a [MyKeyVal], and get a String, and read 
Floats, and get an Int. If I would have a fundep
class Datasource s k v | s -> k v where ...

this wouldn't be possible anymore, I guess?


More information about the Glasgow-haskell-users mailing list