Test recursive newtype
[nt-coerce.git] / test.hs
1 {-# OPTIONS_GHC -fplugin GHC.NT.Plugin #-}
2
3 import GHC.NT
4
5 listNT :: NT a b -> NT [a] [b]
6 listNT = deriveThisNT
7
8 newtype Age = Age Int deriving Show
9
10 ageNT :: NT Age Int
11 ageNT = deriveThisNT
12
13 newtype MyList a = MyList [a] deriving Show
14
15 myListNT :: NT (MyList a) [a]
16 myListNT = deriveThisNT
17
18 foo :: NT a b -> NT (MyList a) (MyList b)
19 foo = deriveThisNT
20
21 newtype R a = R [R a] deriving Show
22
23 rNT :: NT (R a) [R a]
24 rNT = deriveThisNT
25
26 -- Would not work (but is removed anyways before it is seen by GHC.NT.Plugin)
27 bar :: NT (MyList Age) [Int]
28 bar = deriveThisNT
29
30 main = do
31     let n = 1 :: Int
32     let a = coerce (sym ageNT) 1
33     let l1 = [a]
34     let l2 = coerce (listNT ageNT) l1
35     let l3 = coerce (sym myListNT) l2
36     print a
37     print l2
38     print l3
39     print $ coerce (foo (sym ageNT)) l3
40     --print $ coerce bar (MyList [a])
41     print $ coerce (sym rNT) []
42