[Haskell-cafe] overlapping instances,
selecting if type a does not belong to class?
Marc Weber
marco-oweber at gmx.de
Mon Feb 26 19:13:13 EST 2007
I want to write a class introducing a function which should append a b
resulting in a HList containing a and b (order doesn't matter)
So I came up with:
============= code ===================================================
class (HList c) => HListAppendArbitrary a b c | a b -> c where
hAppendArbitrary :: a -> b -> c
-- instance HList + HList (1)
instance (HList a, HList b, HAppend a b c, HList c)
=> HListAppendArbitrary a b c where
hAppendArbitrary a b = hAppend a b
-- overlapping instance HList + value (2)
instance (HList a, HList c)
=> HListAppendArbitrary a b c where
hAppendArbitrary a b = HCons b a
============= error ==================================================
hps-lib/HPS/Utils.hs|130| 0:
|| Duplicate instance declarations:
|| instance [overlap ok] (HList a, HList b, HAppend a b c, HList c) =>
|| HListAppendArbitrary a b c
-- Defined at hps-lib/HPS/Utils.hs|130| 0
|| instance [overlap ok] (HList a, HList c) =>
|| HListAppendArbitrary a b c
-- Defined at hps-lib/HPS/Utils.hs|134| 0
============= =======================================================
instance (2) should be used if b does not belong to class HList.
Of course there is another opportunity by writing (HCons a x) instead of
to force the first type beeing a HList...
Which is the topic to read from the ghc/ haskell manual ?
Marc Weber
More information about the Haskell-Cafe
mailing list