[Haskell] ghc question
Simon Peyton-Jones
simonpj at microsoft.com
Wed Mar 17 16:08:51 EST 2004
GHC does context reduction as late as possible, so that when overlapping
instances are involved the commitment is made where maximum information
is available.
Simon
| -----Original Message-----
| From: haskell-bounces at haskell.org [mailto:haskell-bounces at haskell.org]
On Behalf Of Jurriaan Hage
| Sent: 17 March 2004 15:35
| To: haskell at haskell.org
| Subject: [Haskell] ghc question
|
| Hello,
|
| Given the fact that Haskell 98 demands that class constraints in an
| explicit type are
| in a normal form (either a variable, or a type variable applied to a
| list of types), it struck me
| that in the following (not very useful) program ghci yields a type
| which is not of that form.
|
| class X a where
| (><) :: a -> a -> Bool
|
| class Y a where
| (<>) :: a -> a -> Bool
| _ <> _ = True
|
| instance Y a => X [a] where
| x >< y = not(head x <> head y)
|
| --f :: Y a => a -> a -> Bool
| f g h = [g] >< [h]
|
| Now, in ghci
| :t f yields f :: forall t. (X [t]) => t -> t -> Bool
|
| Hugs does reduce the type of f to the explicit type in comments.
|
| My question is: is there any special reason for this behaviour?
|
| Jur
| --
| http://www.cs.uu.nl/people/jur/progrock.html -- jur at cs.uu.nl
| If e-mail does not work try jurriaanhage at hotmail.com
|
| _______________________________________________
| Haskell mailing list
| Haskell at haskell.org
| http://www.haskell.org/mailman/listinfo/haskell
More information about the Haskell
mailing list