blob: 03be25659e7252d7e2de8dfeee5199f8063f1d14 (
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
|
-- !!! an example Simon made up
--
module ShouldSucceed where
f x = (x+1, x<3, g True, g 'c')
where
g y = if x>2 then [] else [y]
{-
Here the type-check of g will yield an LIE with an Ord dict
for x. g still has type forall a. a -> [a]. The dictionary is
free, bound by the x.
It should be ok to add the signature:
-}
f2 x = (x+1, x<3, g2 True, g2 'c')
where
-- NB: this sig:
g2 :: a -> [a]
g2 y = if x>2 then [] else [y]
{-
or to write:
-}
f3 x = (x+1, x<3, g3 True, g3 'c')
where
-- NB: this line:
g3 :: a -> [a]
g3 = (\ y -> if x>2 then [] else [y])::(a -> [a])
|