instance declaration troubles
Fri, 7 Mar 2003 13:24:50 -0000
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
I'll fix 22.214.171.124, which you are quoting.
| -----Original Message-----
| From: Hal Daume III [mailto:hdaume@ISI.EDU]
| Sent: 07 March 2003 03:16
| To: Nick Name
| Cc: firstname.lastname@example.org
| Subject: Re: instance declaration troubles
| From the GHC docs:
| In the signature of a class operation, every constraint must mention
| least one type variable that is not a class type variable. Thus:
| class Collection c a where
| mapC :: Collection c b =3D> (a->b) -> c a -> c b
| is OK because the constraint (Collection a b) mentions b, even though
| also mentions the class variable a. On the other hand:
| class C a where
| op :: Eq a =3D> (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
| the offending context up to the superclass context:
| class Eq a =3D> C a where
| op ::(a,b) -> (a,b)
| A yet more relaxed rule would allow the context of a class-op
| mention only class type variables. However, that conflicts with Rule
| 1(b) for types above.
| Hal Daume III | email@example.com
| "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) =3D> Functor a where
| > fmap f x =3D mk (ls x >>=3D 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
| > 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