
From the GHC docs:
In the signature of a class operation, every constraint must mention at least one type variable that is not a class type variable. Thus: class Collection c a where mapC :: Collection c b => (a->b) -> c a -> c b is OK because the constraint (Collection a b) mentions b, even though it also mentions the class variable a. On the other hand: class C a where op :: Eq a => (a,b) -> (a,b) is not OK because the constraint (Eq a) mentions on the class type variable a, but not b. However, any such example is easily fixed by moving the offending context up to the superclass context: class Eq a => C a where op ::(a,b) -> (a,b) A yet more relaxed rule would allow the context of a class-op signature to mention only class type variables. However, that conflicts with Rule 1(b) for types above. -- Hal Daume III | hdaume@isi.edu "Arrest this man, he talks in maths." | www.isi.edu/~hdaume On Fri, 7 Mar 2003, Nick Name wrote:
I want to declare the following:
class Get a where ls :: a b -> IO [b] mk :: IO [b] -> a b
instance (Get a) => Functor a where fmap f x = mk (ls x >>= return . map f)
But to have ghc type everything, I have to turn on "-fglasgow-exts -fallow-undecidable-instances -fallow-overlapping-instances".
Is there a clean way to state that all types in my type class are also in the "Functor" type class?
If not, what is the problem?
Vincenzo _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe