Ticket #5684: Bug.hs

File Bug.hs, 1.2 KB (added by selinger, 2 years ago)

reproduces ghc: panic! (the 'impossible' happened) in ghc 7.2.2

Line 
1{-# OPTIONS -XFunctionalDependencies -XUndecidableInstances #-} 
2
3module Bug where
4
5newtype Mon a = Mon a
6instance Monad Mon where
7  return x = Mon x
8  (Mon f) >>= g = g f
9
10class Myclass a qa ca | a -> qa, qa -> a, qa -> ca where
11        qd_new :: a -> a
12
13instance Myclass Bool Int Int where
14        qd_new a = a
15
16instance Myclass a qa  ca => Myclass [a] [qa] [ca] where
17        qd_new l = l
18
19instance (Myclass a qa ca, Myclass b qb cb, Myclass c qc cc) => Myclass (a,b,c) (qa,qb,qc) (ca,cb,cc) where
20        qd_new a = a
21
22fun1 :: (Myclass a qa ca, Myclass b qb cb) => (qa -> Mon qb) -> a -> b
23fun1 f x = error "fun1"
24
25data Mydata = Mydata {
26    mydata :: Int -> ([Int], [Int], Int) -> Mon ([Int], [Int], Int)
27}
28
29fun3 :: Mydata -> IO()
30fun3 x =
31  mapM_ fun4 [ 0 ]
32  where
33    fun5 = mydata x
34   
35    fun6 :: (Int, Int) -> (Int, Bool)
36    fun6 (_, _) = (3, False) where
37     
38      (_, _, _) = fun1 (fun5 7) ([], [], False)
39     
40    fun4 :: Int -> IO()
41    fun4 c = return ()
42
43
44fun7 :: IO()
45fun7 = 
46  let n = 5
47      a = [True]
48      b = []
49      (a', b', m') = fun1 (fun8 5) (a, b, False)
50 
51      fun8 :: Int -> (Int -> Int, Int -> Int, Int) -> Mon (Int -> Int, Int -> Int, Int)
52      fun8 n (a, b, m) = 
53        return (a, b, m)
54     
55  in
56    print "fun7"