blob: 66abe6dcbe749cf27f961247f126d26cc59ac9be (
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
|
{-# LANGUAGE ImplicitParams #-}
module Main where
f0 :: (?x :: Int) => () -> Int
f0 () = let ?x = 5 in ?x
-- Should always return 5
f1 :: (?x :: Int) => () -> Int
f1 = let ?x = 5 in \() -> ?x
-- Should always return 5
f2 () = let ?x = 5 in \() -> ?x
-- Inferred type: (Num a, ?x::a) => () -> () -> a
-- should always return 5
f3 :: () -> ((?x :: Int) => Int)
-- Deep skolemisation means that the local x=5 still wins
f3 = let ?x = 5 in \() -> ?x
main = let ?x = 0 in
do { print (f0 ())
; print (f1 ())
; print (f2 () ())
; print (f3 ()) }
|