GHC derives and accepts illegal Haskell98 contexts
Simon Peyton-Jones
simonpj at microsoft.com
Thu Aug 9 14:46:29 EDT 2001
Thanks for pointing this out. You're the second person who has found
that GHC is a bit too liberal in accepting non-H98 programs. The reason
for this was that checking of types themselves was a bit contorted.
I've
rejigged it now, and (once I've committed it) you should find that GHC
only
accepts H98 types.
Simon
| -----Original Message-----
| From: kahl at heraklit.informatik.unibw-muenchen.de
| [mailto:kahl at heraklit.informatik.unibw-muenchen.de]
| Sent: 24 July 2001 12:38
| To: glasgow-haskell-bugs at haskell.org
| Subject: GHC derives and accepts illegal Haskell98 contexts
|
|
|
| I have experimented with the definition of class assertions
| in section 4.1.3 in the Haskell 98 report, and found that GHC
| 4.08 and GHC 5.00.1 (invoked via ``ghc -c Test.hs'') both
| derive and accept type arguments (in class assertions) that
| do not have a variable as head.
|
| I cannot really imagine where this might hurt, though.
|
|
| By the way, I find that the .hi format of 5.00 is, from a
| human-readability point of view, in my opinion not optimal in
| that there is no separator after the __forall-bound variables:
|
| r2 :: __forall b (E (PrelBase.String, b)) => b -> PrelBase.Bool;
| ^
|
| There is no comparison with NHC since NHC still has the
| ``simple context restriction''.
|
|
| Best regards,
|
| Wolfram
|
| ==============================================================
| ===========
|
| module Test where
|
| class T a where
| t :: a b c -> Bool
|
| class E a where
| e :: a -> a -> Bool
|
| instance T (,) where
| t (a,b) = True
|
| q1 :: (T a,Eq (a String b)) => a String b -> Bool
| q1 x = if x == x then t x else True
|
| --r1 :: Eq (String, b) => b -> Bool -- derived and accepted by GHC
| --r1 :: Eq a => a -> Bool -- derived by Hugs98,
| -- accepted by both
| Hugs98 and GHC r1 x = q1 ("asd",x)
|
|
| q2 :: (T a,E (a String b)) => a String b -> Bool
| q2 x = if e x x then t x else True
|
| --r2 :: E (String, b) => b -> Bool -- derived and accepted by GHC
| r2 x = q2 ("asd",x) -- not accepted by hugs +98
|
| _______________________________________________
| Glasgow-haskell-bugs mailing list
| Glasgow-haskell-bugs at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-| haskell-bugs
|
More information about the Glasgow-haskell-bugs
mailing list