packages feed

eliminators-0.8: tests/MatchabilizeSpec.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module MatchabilizeSpec where

import Data.Eliminator
import Data.Type.Equality

import MatchabilizeTypes

import Prelude.Singletons

import Test.Hspec

main :: IO ()
main = hspec spec

spec :: Spec
spec = pure ()

-----

type ElimMaybeSimple :: b -> (a ~> b) -> Maybe a -> b
type ElimMaybeSimple (n :: b) j m =
    UnMatchabilize (ElimMaybe (ConstSym1 b) m n (Matchabilize j))

test1 :: ElimMaybeSimple "a" IdSym0 Nothing :~: "a"
test1 = Refl

test2 :: ElimMaybeSimple "a" IdSym0 (Just "b") :~: "b"
test2 = Refl