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:[EMAIL PROTECTED]
| Sent: 07 March 2003 03:16
| To: Nick Name
| Cc: [EMAIL PROTECTED]
| 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                                   | [EMAIL PROTECTED]
|  "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
| > [EMAIL PROTECTED]
| > http://www.haskell.org/mailman/listinfo/haskell-cafe
| >
| 
| _______________________________________________
| Haskell-Cafe mailing list
| [EMAIL PROTECTED]
| http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to