summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/T17775-view-pats.hs
blob: 8ffd704d9ca4d067718f2c4b64e937de073f2c32 (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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
{-# LANGUAGE RankNTypes, ViewPatterns #-}

module ViewPats where

ex1 :: forall a. a -> a -> Int -> Eq a => Bool
-- Accept; we skolemise over three args
ex1 x ((== x) -> result) _ = result

{-
ex2 :: forall a. a -> a -> Int -> Eq a => Bool
-- Reject: only skolemise over two args
ex2 x ((== x) -> result) = \ _ -> result

ex3 :: forall a. a -> a -> Int -> Eq a => Bool
-- Reject: only skolemise over two args
--    const (result :: Bool) :: b -> Eq a => Bool
ex3 x ((== x) -> result) = const result
-}

ex4 :: forall a. a -> a -> Int -> Eq a => Bool
-- Accept
ex4 x y _ = x == y

ex5 :: forall a. a -> a -> Int -> Eq a => Bool
-- Accept
ex5 x y = \ _ -> x == y

{-
ex6 :: forall a. a -> a -> Int -> Eq a => Bool
-- Reject. Needs (const (bla :: Bool)) :: Int -> Eq a => Bool
ex6 x y = const (x == y)
-}

ex7 :: forall a. a -> a -> Eq a => Bool
-- Accept
ex7 x ((== x) -> result) = result

ex8 :: forall a. a -> a -> Eq a => Bool
-- Accept
ex8 x y = x == y

ex9 :: forall a. a -> Eq a => a -> Bool
-- Accept
ex9 x ((== x) -> result) = result

ex10 :: forall a. a -> Eq a => a -> Bool
-- Accept
ex10 x y = x == y

ex11 :: forall a. a -> Eq a => a -> Bool
-- Accept
ex11 x = (== x)