"Jeffrey R. Lewis" wrote:

> I'll certainly have a look, but, Thomas, I'll need more to go on.  Also, I wouldn't 
>count on much from the implementation of functional dependencies in 4.08 - it was 
>only partially implemented at the time that release was snapshotted.
>
> --Jeff

Simon Peyton-Jones wrote:

> Thomas, in parallel, I'd like to get this bug into our regression test
> suite.  How hard would it be to boil down your program to something
> of modest size that still shows the bug?
>

As promised, here is a small example that shows the bug.

Regards,
Thomas Hallgren
{- A stripped down example that causes GHC 4.08.1 to crash with:

   basicTypes/Var.lhs:194: Non-exhaustive patterns in function readMutTyVar
-}

main = dup 1 >>= print

foreign import "dup" primDup :: Int -> IO Int
--dup :: Int -> IO Int               -- not needed with (1), needed with (2)
dup = call primDup                   -- ghc crashes here with (1), ok with (2)

class Call    c h | c -> h where call  :: c -> h            -- (1) problematic
--class Call    c h          where call  :: c -> h          -- (2) ok

class Result  c h | c -> h where fromC :: c -> IO h

instance Result c h => Call (IO c) (IO h) where call f = fromC =<< f
instance Call c h => Call (Int->c) (Int->h) where call f = call . f

instance Result Int Int where fromC = return


{-
The example is perhaps too stripped down to illustrate the purpose of these
classes, but the idea is that the class "Call" should relate suitably declared
low-level prim_types in foreign imports to sensible, high-level Haskell types,
allowing high level functions to be obtained by simply applying the method
"call" to the primitive function, as in the definition of dup above, without
having to explicitly give also the type of the high level function.
-}

Reply via email to