I've not had any problems with them, though of course your mileage may vary. Have a look at section 7.4.4.3 in http://www.haskell.org/ghc/docs/latest/html/users_guide/type-extensions.html#multi-param-type-classes for an explanation. Basically, if you have a cyclic class dependency graph, the type checker won't terminate. Well, it will, but only because there's a limit on the recursion depth. The trivial example is

instance C a => C a where ...

In practice, I'm not sure that this is really a big issue, and it does come in handy. Perhaps someone who's actually been bitten by a problem with undecidable instances can comment?

Bryn


Joel Reymont wrote:
This requires

{-# OPTIONS_GHC -fallow-undecidable-instances #-}

but since I'm using -fglasgow-exts in a lot of places I'm wondering if adding undecidable instances would be a bad habit. I guess not... not until I shoot myself in the foot :-).

Any explanation of undecidable instances, the good and the bad?

    Joel

On Oct 27, 2005, at 6:49 PM, Bryn Keller wrote:

How about this?

class ArbitraryDefault a where {}

instance (Integral a, Bounded a, ArbitraryDefault a) => Arbitrary a where
   arbitrary = arbitraryBound
   coarbitrary a = error "Not implemented"

instance ArbitraryDefault Word16   instance ArbitraryDefault Word32
instance ArbitraryDefault Word64

--
http://wagerlabs.com/








_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to