summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/typecheck/should_compile/tc089.hs
blob: b2516df0ad41a679a2886c417472a6b63cb2a453 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
-- !!! Stress test for type checker

module ShouldSucceed where

import Prelude hiding (head)

one :: a
one = one

head (x:xs) = x

bottom xs = head xs

absIf a b c = a

absAnd a b = head [a,b]

fac_rec fac0 n a 
  = (absIf (absAnd (s_3_0 n) one) 
           (s_2_0 a) 
           (fac0 (absAnd (s_3_2 n) one) (absAnd (s_3_1 n) (s_2_1 a))))

f_rec f0 a 
  = (f0 (s_1_0 a))

g_rec g0 g1 x y z p 
  = (absIf (absAnd (s_3_0 p) one) 
           (absAnd (s_1_0 x) (s_3_0 z)) 
           (absAnd 
              (g0 (s_1_0 y) one one (absAnd (s_3_1 p) one)) 
              (g1 (s_3_2 z) (s_3_1 z) one (absAnd (s_3_2 p) one))))

s_2_0 (v0,v1)   = v0
s_2_1 (v0,v1)   = v1
s_1_0 v0  = v0
s_3_0 (v0,v1,v2)   = v0
s_3_1 (v0,v1,v2)   = v1
s_3_2 (v0,v1,v2)   = v2

fac n a = fac_rec fac_rec4 n a

fac_rec4 n a  = (fac_rec fac_rec3 n a)
fac_rec3 n a  = (fac_rec fac_rec2 n a)
fac_rec2 n a  = (fac_rec fac_rec1 n a)
fac_rec1 n a  = (fac_rec fac_rec0 n a)
fac_rec0 n a  = (bottom [n,a])

f a = (f_rec f_rec2 a)

f_rec2 a  = (f_rec f_rec1 a)
f_rec1 a  = (f_rec f_rec0 a)
f_rec0 a  = (bottom [a])

g x y z p = (g_rec g_rec8 g_rec8 x y z p)

{- 
g x y z p = (g_rec g_rec16 g_rec16 x y z p)

g_rec16 x y z p  = (g_rec g_rec15 g_rec15 x y z p)
g_rec15 x y z p  = (g_rec g_rec14 g_rec14 x y z p)
g_rec14 x y z p  = (g_rec g_rec13 g_rec13 x y z p)
g_rec13 x y z p  = (g_rec g_rec12 g_rec12 x y z p)
g_rec12 x y z p  = (g_rec g_rec11 g_rec11 x y z p)
g_rec11 x y z p  = (g_rec g_rec10 g_rec10 x y z p)
g_rec10 x y z p  = (g_rec g_rec9 g_rec9 x y z p)
g_rec9 x y z p  = (g_rec g_rec8 g_rec8 x y z p)
-}

g_rec8 x y z p  = (g_rec g_rec7 g_rec7 x y z p)
g_rec7 x y z p  = (g_rec g_rec6 g_rec6 x y z p)
g_rec6 x y z p  = (g_rec g_rec5 g_rec5 x y z p)
g_rec5 x y z p  = (g_rec g_rec4 g_rec4 x y z p)
g_rec4 x y z p  = (g_rec g_rec3 g_rec3 x y z p)
g_rec3 x y z p  = (g_rec g_rec2 g_rec2 x y z p)
g_rec2 x y z p  = (g_rec g_rec1 g_rec1 x y z p)
g_rec1 x y z p  = (g_rec g_rec0 g_rec0 x y z p)
g_rec0 x y z p  = (bottom [x,y,z,p])