{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, MultiParamTypeClasses #-}
module TestIgnore (test_ignore) where
import Data.Typeable(Typeable)
import GHC.Generics (Generic)
import Unbound.Generics.LocallyNameless
import AlphaAssertions
import Test.Tasty
import Test.Tasty.HUnit
type Var = Name Term
type SourcePos = (Int, Int)
data SourceSpan = SourceSpan
{ start :: SourcePos
, end :: SourcePos
}
deriving (Show)
data Term
= Var Var
| Lam (Bind Var Term)
| App Term Term
| Ann (Ignore SourceSpan) Term
| NoSubst (Ignore Term)
deriving (Show, Typeable, Generic)
instance Alpha Term
instance Subst Term Term where
isvar (Var x) = Just $ SubstName x
isvar _ = Nothing
lam :: Var -> Term -> Term
lam x t = Lam (bind x t)
x :: Var
x = s2n "x"
y :: Var
y = s2n "y"
t1 :: Term
t1 = Ann (ignore (SourceSpan (0,0) (0,1))) (Var x)
t2 :: Term
t2 = Ann (ignore (SourceSpan (1,0) (1,10))) (Var x)
test_ignore :: TestTree
test_ignore =
testCase "<-(0,0) (0,1)-> x = <-(1,0) (1,10)-> x" $ assertAeq t1 t2