Commit d5e76b26 authored by simonpj's avatar simonpj
Browse files

[project @ 2001-10-04 08:18:06 by simonpj]

Add test that Hugs bizarrely fails
parent 68d5c3f3
......@@ -25,3 +25,4 @@ test "tcrun014" { vtr("", "", "") }
test "tcrun015" { vtr("-O", "", "") }
test "tcrun016" { vtr("", "", "") }
test "tcrun017" { vtr("", "", "") }
test "tcrun018" { vtr("", "", "") }
{-# OPTIONS -fglasgow-exts #-}
import Monad
class Monad m => C1 m x
class (Monad m, C1 m x) => C2 m x
c2 :: x -> m x
class C1 m x => C3 m x
c3 :: x -> m x
instance Monad m => C1 m Bool
instance C2 Maybe Bool
c2 = return
instance C3 Maybe Bool
c3 = return
main = do { print (c2 True :: Maybe Bool) ;
print (c3 True :: Maybe Bool) }
{- Here's the email from Ralf Laemmel
reporting a bug in Hugs
1. If you evaluate "test",
then you get as expected "Just True".
2. Now remove the "Monad M" constraint
in the class C2. [giving the class C3]
This is of course legal and semantics-preserving
since the monad constraints is implied by C1
3. Now evaluate "test" again. Oops, it diverges.
I did this Hugs Version February 2001 under Solaris
and Linux. Command line option -98 is needed of course.
Funny enough, if CTRL-C the evaluation of "test"
and you try it the second time (without reloading
anything etc.), then you see "Program error: {_Gc Black
Hole}". Of course, there is no such black hole.
I extracted the above fragment from a huge problem.
The scheme is the following. It seems have to do
with multi-parameter classes. It definitely has to
do with multi-layered class hierarchies where one
class has a class-wide superclass, as C2 has C1 in
the example. It seems that the superclass is
properly propagated during type-inference/checking
but it is not properly propagated, as for as code
determination in overloading resolution.
Please, let me know if I can be of further assistance.
I am actually amazed how general this scheme is
(3 classes, 2 parameters). How does it come that it
was not detected much earlier.
Anyway, good luck,
P.S.: I have more problems in a larger application.
Certain overloaded expressions diverge. I can recover
from that usually by using explicit function types
for top-level functions, where again -- as in C1 above
-- I repeat some constraints which are derivable. I was
not able to extract a simple program for that problem.
But I would be glad to help you by checking if the
problem is gone after you did the bug fix.
Dr.-Ing. Ralf Laemmel
CWI & VU, Amsterdam, The Netherlands
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment