Improve typechecking of let-bindings
[ghc.git] / testsuite / tests / typecheck / should_fail / tcfail068.stderr
1 \r
2 tcfail068.hs:14:9: error:\r
3     • Couldn't match type ‘s1’ with ‘s’\r
4       ‘s1’ is a rigid type variable bound by\r
5         a type expected by the context:\r
6           forall s1. GHC.ST.ST s1 (IndTree s a)\r
7         at tcfail068.hs:(13,9)-(14,31)\r
8       ‘s’ is a rigid type variable bound by\r
9         the type signature for:\r
10           itgen :: forall a s.\r
11                    Constructed a =>\r
12                    (Int, Int) -> a -> IndTree s a\r
13         at tcfail068.hs:11:1-55\r
14       Expected type: GHC.ST.ST s1 (IndTree s a)\r
15         Actual type: GHC.ST.ST s1 (STArray s1 (Int, Int) a)\r
16     • In the first argument of ‘runST’, namely\r
17         ‘(newSTArray ((1, 1), n) x)’\r
18       In the expression: runST (newSTArray ((1, 1), n) x)\r
19       In an equation for ‘itgen’:\r
20           itgen n x = runST (newSTArray ((1, 1), n) x)\r
21     • Relevant bindings include\r
22         itgen :: (Int, Int) -> a -> IndTree s a\r
23           (bound at tcfail068.hs:12:1)\r
24 \r
25 tcfail068.hs:19:9: error:\r
26     • Couldn't match type ‘s’ with ‘s1’\r
27       ‘s’ is a rigid type variable bound by\r
28         the type signature for:\r
29           itiap :: forall a s.\r
30                    Constructed a =>\r
31                    (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a\r
32         at tcfail068.hs:16:1-75\r
33       ‘s1’ is a rigid type variable bound by\r
34         a type expected by the context:\r
35           forall s1. GHC.ST.ST s1 (IndTree s a)\r
36         at tcfail068.hs:(18,9)-(21,19)\r
37       Expected type: GHC.ST.ST s1 (IndTree s a)\r
38         Actual type: GHC.ST.ST s (IndTree s a)\r
39     • In the first argument of ‘runST’, namely\r
40         ‘(readSTArray arr i\r
41           >>= \ val -> writeSTArray arr i (f val) >> return arr)’\r
42       In the expression:\r
43         runST\r
44           (readSTArray arr i\r
45            >>= \ val -> writeSTArray arr i (f val) >> return arr)\r
46       In an equation for ‘itiap’:\r
47           itiap i f arr\r
48             = runST\r
49                 (readSTArray arr i\r
50                  >>= \ val -> writeSTArray arr i (f val) >> return arr)\r
51     • Relevant bindings include\r
52         arr :: IndTree s a (bound at tcfail068.hs:17:11)\r
53         itiap :: (Int, Int) -> (a -> a) -> IndTree s a -> IndTree s a\r
54           (bound at tcfail068.hs:17:1)\r
55 \r
56 tcfail068.hs:24:36: error:\r
57     • Couldn't match type ‘s’ with ‘s1’\r
58       ‘s’ is a rigid type variable bound by\r
59         the type signature for:\r
60           itrap :: forall a s.\r
61                    Constructed a =>\r
62                    ((Int, Int), (Int, Int)) -> (a -> a) -> IndTree s a -> IndTree s a\r
63         at tcfail068.hs:23:1-87\r
64       ‘s1’ is a rigid type variable bound by\r
65         a type expected by the context:\r
66           forall s1. GHC.ST.ST s1 (IndTree s a)\r
67         at tcfail068.hs:24:29-46\r
68       Expected type: GHC.ST.ST s1 (IndTree s a)\r
69         Actual type: GHC.ST.ST s (IndTree s a)\r
70     • In the first argument of ‘runST’, namely ‘(itrap' i k)’\r
71       In the expression: runST (itrap' i k)\r
72       In an equation for ‘itrap’:\r
73           itrap ((i, k), (j, l)) f arr\r
74             = runST (itrap' i k)\r
75             where\r
76                 itrap' i k\r
77                   = if k > l then return arr else (itrapsnd i k >> itrap' i (k + 1))\r
78                 itrapsnd i k\r
79                   = if i > j then\r
80                         return arr\r
81                     else\r
82                         (readSTArray arr (i, k) >>= \ val -> ...)\r
83     • Relevant bindings include\r
84         itrap' :: Int -> Int -> GHC.ST.ST s (IndTree s a)\r
85           (bound at tcfail068.hs:26:9)\r
86         itrapsnd :: Int -> Int -> GHC.ST.ST s (IndTree s a)\r
87           (bound at tcfail068.hs:29:9)\r
88         arr :: IndTree s a (bound at tcfail068.hs:24:23)\r
89         itrap :: ((Int, Int), (Int, Int))\r
90                  -> (a -> a) -> IndTree s a -> IndTree s a\r
91           (bound at tcfail068.hs:24:1)\r
92 \r
93 tcfail068.hs:36:46: error:\r
94     • Couldn't match type ‘s’ with ‘s1’\r
95       ‘s’ is a rigid type variable bound by\r
96         the type signature for:\r
97           itrapstate :: forall b a c s.\r
98                         Constructed b =>\r
99                         ((Int, Int), (Int, Int))\r
100                         -> (a -> b -> (a, b))\r
101                         -> ((Int, Int) -> c -> a)\r
102                         -> (a -> c)\r
103                         -> c\r
104                         -> IndTree s b\r
105                         -> (c, IndTree s b)\r
106         at tcfail068.hs:(34,1)-(35,62)\r
107       ‘s1’ is a rigid type variable bound by\r
108         a type expected by the context:\r
109           forall s1. GHC.ST.ST s1 (c, IndTree s b)\r
110         at tcfail068.hs:36:40-63\r
111       Expected type: GHC.ST.ST s1 (c, IndTree s b)\r
112         Actual type: GHC.ST.ST s (c, IndTree s b)\r
113     • In the first argument of ‘runST’, namely ‘(itrapstate' i k s)’\r
114       In the expression: runST (itrapstate' i k s)\r
115       In an equation for ‘itrapstate’:\r
116           itrapstate ((i, k), (j, l)) f c d s arr\r
117             = runST (itrapstate' i k s)\r
118             where\r
119                 itrapstate' i k s\r
120                   = if k > l then\r
121                         return (s, arr)\r
122                     else\r
123                         (itrapstatesnd i k s >>= \ (s, arr) -> ...)\r
124                 itrapstatesnd i k s\r
125                   = if i > j then\r
126                         return (s, arr)\r
127                     else\r
128                         (readSTArray arr (i, k) >>= \ val -> ...)\r
129     • Relevant bindings include\r
130         itrapstate' :: Int -> Int -> c -> GHC.ST.ST s (c, IndTree s b)\r
131           (bound at tcfail068.hs:38:9)\r
132         itrapstatesnd :: Int -> Int -> c -> GHC.ST.ST s (c, IndTree s b)\r
133           (bound at tcfail068.hs:41:9)\r
134         arr :: IndTree s b (bound at tcfail068.hs:36:34)\r
135         itrapstate :: ((Int, Int), (Int, Int))\r
136                       -> (a -> b -> (a, b))\r
137                       -> ((Int, Int) -> c -> a)\r
138                       -> (a -> c)\r
139                       -> c\r
140                       -> IndTree s b\r
141                       -> (c, IndTree s b)\r
142           (bound at tcfail068.hs:36:1)\r