What is testsuite/tests/rename/should_fail/rnfail018.hs supposed to test?

When I compile this with 7.8.3, it gives an error message saying that type variables a and m are not in scope. If I add them to the forall, it tells me I need FlexibleContexts. If I add that, then it gives me an error about an ambiguous type variable. Clearly, something crashed ghc-4.04proto, but there's no indication of what that was. If this test is still at all relevant, it probably needs to be updated to target something more narrowly. The program: {-# LANGUAGE MultiParamTypeClasses, ExplicitForAll #-} module ShouldFail where -- !!! For-all with parens -- This one crashed ghc-4.04proto; the parens after the for-all fooled it class Monad m => StateMonad s m where getState :: m s setState0 :: forall b. (StateMonad (a,b) m => m a) setState0 = getState >>= \ (l,_r) -> return l David Feuer

David, the comment in the test says what crashed ghc-4.04proto: "the parens after the for-all fooled it". So I suppose that "forall b. StateMonad (a,b) m => m a" worked fine but "forall b. (StateMonad (a,b) m => m a)" crashed GHC. This test is in a should_fail folder, which means that the compilation of this file should fail and GHC should report an error. Take a look at the rnfail018.stderr file. It says what output do we expect on the standard error. You can see that we expect a and m to be out of scope, which according to your mail is exactly what happens. Note also the file name - rnfail - which stands for "renamer failure" (you can see this also from names of directories). Janek Dnia poniedziałek, 8 września 2014, David Feuer napisał:
When I compile this with 7.8.3, it gives an error message saying that type variables a and m are not in scope. If I add them to the forall, it tells me I need FlexibleContexts. If I add that, then it gives me an error about an ambiguous type variable. Clearly, something crashed ghc-4.04proto, but there's no indication of what that was. If this test is still at all relevant, it probably needs to be updated to target something more narrowly.
The program:
{-# LANGUAGE MultiParamTypeClasses, ExplicitForAll #-} module ShouldFail where -- !!! For-all with parens -- This one crashed ghc-4.04proto; the parens after the for-all fooled it
class Monad m => StateMonad s m where getState :: m s
setState0 :: forall b. (StateMonad (a,b) m => m a) setState0 = getState >>= \ (l,_r) -> return l
David Feuer
participants (2)
-
David Feuer
-
Jan Stolarek