Ryan Ingram wrote:
[EMAIL PROTECTED] is better for this type of question. Follow-up is set
to it.
Here's a test case for the problem I'm having; I'm using runhaskell from
ghc v6.6.
Problem #1) Without -fallow-undecidable-instances, I get the following
error:
Constraint is no smaller than the instance head
This is bad.
Problem #2) With -fallow-undecidable-instances, I get this error instead:
Overlapping instances for ConvertToIntList ()
I don't understand why there is an overlapping instances error; () is
not an instance of ConvertToInt so how could that instance ever apply?
I write anywhere, instance ConvertToInt () where ...
Now it is overlapping.
Is there something basic about type-classes that I'm not understanding
here?
They are open (Open World Assumption). I can add a new instance anywhere at any
time.
Code below:
{-# OPTIONS -fglasgow-exts -fallow-undecidable-instances #-}
module TestCase
where
class ConvertToInt a where
conv :: a -> Int
class ConvertToIntList a where
convl :: [a] -> [Int]
instance ConvertToInt Int where
conv = id
instance ConvertToInt a => ConvertToIntList a where
This is what it's complaining about in the first error; this doesn't work.
convl = map conv
instance ConvertToIntList () where
convl x = []
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell