[project @ 1999-01-23 17:57:35 by sof]
[ghc-hetmet.git] / ghc / tests / typecheck / should_compile / tc089.hs
1 -- !!! Stress test for type checker
2
3 module ShouldSucceed where
4
5 import Prelude hiding (head)
6
7 one = one
8
9 head (x:xs) = x
10
11 bottom = head
12
13 absIf a b c = a
14
15 absAnd a b = head [a,b]
16
17 fac_rec fac0 n a 
18   = (absIf (absAnd (s_3_0 n) one) 
19            (s_2_0 a) 
20            (fac0 (absAnd (s_3_2 n) one) (absAnd (s_3_1 n) (s_2_1 a))))
21
22 f_rec f0 a 
23   = (f0 (s_1_0 a))
24
25 g_rec g0 g1 x y z p 
26   = (absIf (absAnd (s_3_0 p) one) 
27            (absAnd (s_1_0 x) (s_3_0 z)) 
28            (absAnd 
29               (g0 (s_1_0 y) one one (absAnd (s_3_1 p) one)) 
30               (g1 (s_3_2 z) (s_3_1 z) one (absAnd (s_3_2 p) one))))
31
32 s_2_0 (v0,v1)   = v0
33 s_2_1 (v0,v1)   = v1
34 s_1_0 v0  = v0
35 s_3_0 (v0,v1,v2)   = v0
36 s_3_1 (v0,v1,v2)   = v1
37 s_3_2 (v0,v1,v2)   = v2
38
39 fac n a 
40   = (fac_rec fac_rec4 n a)
41
42 fac_rec4 n a  = (fac_rec fac_rec3 n a)
43 fac_rec3 n a  = (fac_rec fac_rec2 n a)
44 fac_rec2 n a  = (fac_rec fac_rec1 n a)
45 fac_rec1 n a  = (fac_rec fac_rec0 n a)
46 fac_rec0 n a  = (bottom [n,a])
47
48 f a 
49   = (f_rec f_rec2 a)
50
51 f_rec2 a  = (f_rec f_rec1 a)
52 f_rec1 a  = (f_rec f_rec0 a)
53 f_rec0 a  = (bottom [a])
54
55 g x y z p = (g_rec g_rec8 g_rec8 x y z p)
56
57 {- 
58 g x y z p = (g_rec g_rec16 g_rec16 x y z p)
59
60 g_rec16 x y z p  = (g_rec g_rec15 g_rec15 x y z p)
61 g_rec15 x y z p  = (g_rec g_rec14 g_rec14 x y z p)
62 g_rec14 x y z p  = (g_rec g_rec13 g_rec13 x y z p)
63 g_rec13 x y z p  = (g_rec g_rec12 g_rec12 x y z p)
64 g_rec12 x y z p  = (g_rec g_rec11 g_rec11 x y z p)
65 g_rec11 x y z p  = (g_rec g_rec10 g_rec10 x y z p)
66 g_rec10 x y z p  = (g_rec g_rec9 g_rec9 x y z p)
67 g_rec9 x y z p  = (g_rec g_rec8 g_rec8 x y z p)
68 -}
69
70 g_rec8 x y z p  = (g_rec g_rec7 g_rec7 x y z p)
71 g_rec7 x y z p  = (g_rec g_rec6 g_rec6 x y z p)
72 g_rec6 x y z p  = (g_rec g_rec5 g_rec5 x y z p)
73 g_rec5 x y z p  = (g_rec g_rec4 g_rec4 x y z p)
74 g_rec4 x y z p  = (g_rec g_rec3 g_rec3 x y z p)
75 g_rec3 x y z p  = (g_rec g_rec2 g_rec2 x y z p)
76 g_rec2 x y z p  = (g_rec g_rec1 g_rec1 x y z p)
77 g_rec1 x y z p  = (g_rec g_rec0 g_rec0 x y z p)
78 g_rec0 x y z p  = (bottom [x,y,z,p])