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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
tcfail068.hs:14:9: error:
• Couldn't match type ‘s1’ with ‘s’
‘s1’ is a rigid type variable bound by
a type expected by the context:
forall s1. GHC.ST.ST s1 (IndTree s a)
at tcfail068.hs:(13,15)-(14,31)
‘s’ is a rigid type variable bound by
the type signature for:
itgen :: forall a s.
Constructed a =>
(Int, Int) -> a -> IndTree s a
at tcfail068.hs:11:1-55
Expected type: GHC.ST.ST s1 (IndTree s a)
Actual type: GHC.ST.ST s1 (STArray s1 (Int, Int) a)
• In the first argument of ‘runST’, namely
‘(newSTArray ((1, 1), n) x)’
In the expression: runST (newSTArray ((1, 1), n) x)
In an equation for ‘itgen’:
itgen n x = runST (newSTArray ((1, 1), n) x)
• Relevant bindings include
itgen :: (Int, Int) -> a -> IndTree s a
(bound at tcfail068.hs:12:1)
tcfail068.hs:19:9: error:
• Couldn't match type ‘s1’ with ‘s’
‘s1’ is a rigid type variable bound by
a type expected by the context:
forall s1. GHC.ST.ST s1 (IndTree s a)
at tcfail068.hs:(18,15)-(21,19)
‘s’ is a rigid type variable bound by
the type signature for:
itiap :: forall a s.
Constructed a =>
(Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a
at tcfail068.hs:16:1-75
Expected type: GHC.ST.ST s1 (IndTree s a)
Actual type: GHC.ST.ST s (IndTree s a)
• In the first argument of ‘runST’, namely
‘(readSTArray arr i
>>= \ val -> writeSTArray arr i (f val) >> return arr)’
In the expression:
runST
(readSTArray arr i
>>= \ val -> writeSTArray arr i (f val) >> return arr)
In an equation for ‘itiap’:
itiap i f arr
= runST
(readSTArray arr i
>>= \ val -> writeSTArray arr i (f val) >> return arr)
• Relevant bindings include
arr :: IndTree s a (bound at tcfail068.hs:17:11)
itiap :: (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a
(bound at tcfail068.hs:17:1)
tcfail068.hs:24:36: error:
• Couldn't match type ‘s1’ with ‘s’
‘s1’ is a rigid type variable bound by
a type expected by the context:
forall s1. GHC.ST.ST s1 (IndTree s a)
at tcfail068.hs:24:35-46
‘s’ is a rigid type variable bound by
the type signature for:
itrap :: forall a s.
Constructed a =>
((Int, Int), (Int, Int)) -> (a -> a) -> IndTree s a -> IndTree s a
at tcfail068.hs:23:1-87
Expected type: GHC.ST.ST s1 (IndTree s a)
Actual type: GHC.ST.ST s (IndTree s a)
• In the first argument of ‘runST’, namely ‘(itrap' i k)’
In the expression: runST (itrap' i k)
In an equation for ‘itrap’:
itrap ((i, k), (j, l)) f arr
= runST (itrap' i k)
where
itrap' i k
= if k > l then return arr else (itrapsnd i k >> itrap' i (k + 1))
itrapsnd i k
= if i > j then
return arr
else
(readSTArray arr (i, k) >>= \ val -> ...)
• Relevant bindings include
itrap' :: Int -> Int -> GHC.ST.ST s (IndTree s a)
(bound at tcfail068.hs:26:9)
itrapsnd :: Int -> Int -> GHC.ST.ST s (IndTree s a)
(bound at tcfail068.hs:29:9)
arr :: IndTree s a (bound at tcfail068.hs:24:23)
itrap :: ((Int, Int), (Int, Int))
-> (a -> a) -> IndTree s a -> IndTree s a
(bound at tcfail068.hs:24:1)
tcfail068.hs:36:46: error:
• Couldn't match type ‘s1’ with ‘s’
‘s1’ is a rigid type variable bound by
a type expected by the context:
forall s1. GHC.ST.ST s1 (c, IndTree s b)
at tcfail068.hs:36:45-63
‘s’ is a rigid type variable bound by
the type signature for:
itrapstate :: forall b a c s.
Constructed b =>
((Int, Int), (Int, Int))
-> (a -> b -> (a, b))
-> ((Int, Int) -> c -> a)
-> (a -> c)
-> c
-> IndTree s b
-> (c, IndTree s b)
at tcfail068.hs:(34,1)-(35,62)
Expected type: GHC.ST.ST s1 (c, IndTree s b)
Actual type: GHC.ST.ST s (c, IndTree s b)
• In the first argument of ‘runST’, namely ‘(itrapstate' i k s)’
In the expression: runST (itrapstate' i k s)
In an equation for ‘itrapstate’:
itrapstate ((i, k), (j, l)) f c d s arr
= runST (itrapstate' i k s)
where
itrapstate' i k s
= if k > l then
return (s, arr)
else
(itrapstatesnd i k s >>= \ (s, arr) -> ...)
itrapstatesnd i k s
= if i > j then
return (s, arr)
else
(readSTArray arr (i, k) >>= \ val -> ...)
• Relevant bindings include
itrapstate' :: Int -> Int -> c -> GHC.ST.ST s (c, IndTree s b)
(bound at tcfail068.hs:38:9)
itrapstatesnd :: Int -> Int -> c -> GHC.ST.ST s (c, IndTree s b)
(bound at tcfail068.hs:41:9)
arr :: IndTree s b (bound at tcfail068.hs:36:34)
itrapstate :: ((Int, Int), (Int, Int))
-> (a -> b -> (a, b))
-> ((Int, Int) -> c -> a)
-> (a -> c)
-> c
-> IndTree s b
-> (c, IndTree s b)
(bound at tcfail068.hs:36:1)
|