Allowing duplicate instances in GHC 6.4
Keean Schupke
k.schupke at imperial.ac.uk
Fri Mar 25 11:06:42 EST 2005
Robert van Herk wrote:
> Hi all,
>
> I need to use duplicate instances. I read in the documentation on GHC
> 6.4, that overlapping class instances checks are lazy instead of
> gready in 6.4. However, my code still gives duplicate instance errors
> when compiling in GHC 6.4.
>
> Is the duplicate instance check still gready? Is there a way to
> overwrite that behaviour?
>
> Right now, I have two instance of a class Datasource. Datasource
> allows the user to read (key,value) pairs.
>
> class Datasource ds k v where
> ...
>
> Now, I wanted to make a special datasource that combines two
> datasources, namely
>
> data JoinedDS left right = JoinedDS left right
> instance (Datasource left k v) => Datasource (JoinedDS left right) k v
> where
> ...
>
> instance (Datasource right k v) => Datasource (JoinedDS left right) k
> v where
> ...
>
> The idea is that when you combine 2 datasources in one JoinedDS, the
> user can read both types from the JoinedDS. I do not need to allow to
> combine 2 different datasources that have the same types of
> (key,value) pairs, so the duplicate instances will not occur and when
> they do, this will be by mistake. Hence, the two premisses in the
> instance declaration will never be fulfilled both at the same time and
> I do not want a duplicate instance error here.
>
> Is there a solution to this problem?
>
To resolve overlap the HEAD of the instance must be different... Might I
suggest:
-- as value depends on source and key, requires functional dependancy
class Datasource s k v | s k -> v ...
data JoinedDS l r = JoinedDS l r
instance (Datasource l k v1,Datasource r k v2) => Datasource (JoinedDS l
r) k (v1,v2) ...
Now a joined datasource resturns a pair of values instead of a single value.
Keean.
More information about the Glasgow-haskell-users
mailing list