More general deriveThisNT
[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 main = do
22     let n = 1 :: Int
23     let a = coerce (sym ageNT) 1
24     let l1 = [a]
25     let l2 = coerce (listNT ageNT) l1
26     let l3 = coerce (sym myListNT) l2
27     print a
28     print l2
29     print l3
30     print $ coerce (foo (sym ageNT)) l3