It's in 7.3.5.3. I'm going to make it more prominent
S
| -Original Message-
| From: Hal Daume III [mailto:[EMAIL PROTECTED]
| Sent: 07 March 2003 15:08
| To: Nick Name
| Cc: Haskell Cafe
| Subject: RE: instance declaration troubles
|
| Double Argh! I just noticed that this isn't what I meant to quote and
now
| I can't find it. But the basic idea of what I wanted to quote was
that:
|
| YOu have to have at least one non-type variable in instance
declarations
| otherwise we don't necessarily know that reduction will terminate.
I.e.:
|
| instance A a = B a where
| instance B a = A a where
|
| will not terminate if you ever try to reduce A to B. I recall from
the
| docs that Simon is looking for a rule which lifts this rule but still
| maintains decidability. or something along those lines.
|
| Sorry about that!
|
| - Hal
|
| --
| Hal Daume III | [EMAIL PROTECTED]
| Arrest this man, he talks in maths. | www.isi.edu/~hdaume
|
| On Fri, 7 Mar 2003, Simon Peyton-Jones wrote:
|
| 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
|
|
| ___
| 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