summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/typecheck/should_run/IPRun.hs
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 ()) }