[Haskell-cafe] Duplicate instance declaration
Twan van Laarhoven
twanvl at gmail.com
Thu Mar 22 16:02:26 EDT 2007
Bas van Dijk wrote:
> ....
>
> I would also like to get the formatting constraints working. However
> the solution in the code below gives a "Duplicate instance
> declarations" error. If I -fallow-overlapping-instances than the type
> checker goes into an infinite loop.
>
> I would like to know why this is happening and if there's a way to fix it.
You have multiple instances with the same instance head (the part after
the =>). Haskell doesn't look at the context when deciding what instance
to use, so they overlap.
An alternative idea would be to use data types instead of classes for
the registers and memory locations
> data Reg size tag = Reg
> data EAX_ -- dummy type, not exported
> -- only export this
> type EAX = Reg Bit32 EAX_
> eax :: EAX
> eax = Reg
and similairly for memory
> data Mem size tag = Mem Word32
> data Mem32_ -- dummy type, not exported
> type Mem32 = Mem Bit32 Mem32_
Now you can have the instances
> instance MovFormat (Reg size a) (Reg size b)
> instance MovFormat (Reg size a) (Mem size b)
etc.
Twan
More information about the Haskell-Cafe
mailing list