summaryrefslogtreecommitdiff
path: root/testsuite/tests/determinism/typecheck/A.hs
blob: 1d8c5267dba319127d2ca0b69df2c7e3c777f1f7 (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
module A (
  ) where

-- This reproduces the issue where type variables would be lifted out in
-- different orders. Compare:
--
-- lvl =
--   \ (@ (c :: * -> *)) (@ (t :: * -> *)) ->
--     undefined
--     @ ((forall d. Data d => c (t d))
--        -> Maybe (c Node))
--     (some Callstack thing)
--
-- $cdataCast1 =
--   \ (@ (c :: * -> *)) (@ (t :: * -> *)) _ [Occ=Dead] ->
--     lvl @ c @ t
--
-- vs
--
-- lvl =
--   \ (@ (t :: * -> *)) (@ (c :: * -> *)) ->
--     undefined
--     @ ((forall d. Data d => c (t d))
--        -> Maybe (c Node))
--     (some Callstack thing)
--
-- $cdataCast1 =
--   \ (@ (c :: * -> *)) (@ (t :: * -> *)) _ [Occ=Dead] ->
--     lvl @ t @ c

import Data.Data

data Node = Node (Maybe Int) [Node]

instance Data Node where

  gfoldl = gfoldl
  gunfold = gunfold
  toConstr = toConstr
  dataTypeOf = dataTypeOf

  dataCast1 _ = undefined
  dataCast2 = dataCast2

  gmapT = gmapT
  gmapQl = gmapQl
  gmapQr = gmapQr
  gmapQ = gmapQ
  gmapQi = gmapQi
  gmapM = gmapM
  gmapMp = gmapMp
  gmapMo = gmapMo