
Argh. The documentation is out of date, or rather, inconsistent. In Section 7.3.4 you'll see that GHC -fglasgow-exts lifts the restriction that class methods must not constrain only the class type variable. I'll fix 7.3.5.2, which you are quoting. Simon | -----Original Message----- | From: Hal Daume III [mailto:hdaume@ISI.EDU] | Sent: 07 March 2003 03:16 | To: Nick Name | Cc: haskell-cafe@haskell.org | Subject: Re: instance declaration troubles | | 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 | > | | _______________________________________________ | Haskell-Cafe mailing list | Haskell-Cafe@haskell.org | http://www.haskell.org/mailman/listinfo/haskell-cafe