The following rings a faint bell from somewhere, but if there's a standard workaround I can't recall or lay my hand on it currently: > class PO a where > (|=) :: a -> a -> Bool > > class Num a => SemiRing a > > class SemiRing a => CSemiRing a > > instance (Bounded a, Enum a, SemiRing a) => PO a where > a |= b > = or [ a + c == b | c <- boundedEnumFrom minBound ] > > instance CSemiRing a => PO a where > a |= b = a + b == b
The above is in any event requires the "-fallow-undecidable-instances" flag, due to the format of the instance clauses, and they're worse than merely "overlapping" due to the identical heads. But I'm not quite clear why "incoherent" doesn't help here: isn't the gist of that to allow the second to override the first, where they conflict? Is there otherwise a means to have it behave in such a way? (I can hack around this by removing the distinction betweem the two classes and encoding it as run-time property (which may get compiled out statically anyway, and I suspect what I actually want are hierarchical defaults rather than instances, but that's more like fodder for another list.) Cheers, Alex. _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
