f676953984790ddeef0d17e4dfea30f76f6fdd48
[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 -- Would not work (but is removed anyways before it is seen by GHC.NT.Plugin)
22 bar :: NT (MyList Age) [Int]
23 bar = deriveThisNT
24
25 main = do
26     let n = 1 :: Int
27     let a = coerce (sym ageNT) 1
28     let l1 = [a]
29     let l2 = coerce (listNT ageNT) l1
30     let l3 = coerce (sym myListNT) l2
31     print a
32     print l2
33     print l3
34     print $ coerce (foo (sym ageNT)) l3
35     --print $ coerce bar (MyList [a])
36