singletons-base-3.3: tests/compile-and-dump/Singletons/T445.hs
module T445 where
import Data.Singletons.TH
import qualified GHC.TypeLits as Lit
import Numeric.Natural (Natural)
import Prelude.Singletons
import Singletons.Nat
type Lit :: Natural -> Nat
type family Lit n where
Lit 0 = Zero
Lit n = Succ (Lit (n Lit.- 1))
$(genDefunSymbols [''Lit])
$(promoteOnly [d|
evenb :: Nat -> Bool
evenb Zero = True
evenb (Succ Zero) = False
evenb (Succ (Succ n)) = evenb n
filterEvenGt7 :: [Nat] -> [Nat]
filterEvenGt7 = filter (\x -> evenb x && x > lit 7)
|])
testFilterEvenGt7 :: FilterEvenGt7 (Map LitSym0 '[5,2,6,19,129]) :~: '[]
testFilterEvenGt7 = Refl