free-theorems-seq-1.0: src/Language/Haskell/FreeTheorems/Variations/PolySeq/Syntax.hs
{-# OPTIONS_GHC -XTypeOperators -XRank2Types #-}
{-# LANGUAGE FlexibleContexts, ScopedTypeVariables, DeriveDataTypeable #-}
module Language.Haskell.FreeTheorems.Variations.PolySeq.Syntax where
import Data.Generics(Typeable,Data)
import Language.Haskell.FreeTheorems.Variations.PolySeq.Debug
-- *Data type declarations
newtype LabVar = LabVar Int deriving (Show, Eq, Typeable, Data)
data LabVal
= Nbr
| Epsilon
deriving(Show, Eq, Ord, Typeable, Data)
data Label
= LVar LabVar
| LVal LabVal
| Non
deriving(Show, Eq, Typeable, Data)
newtype TypVar = TypVar String deriving (Show, Eq, Typeable, Data)
data Typ = TVar TypVar
| TArrow Label Typ Typ
| TAll Label TypVar Typ
| TList Typ
| TInt
| TBool
deriving (Show, Eq, Typeable, Data)
newtype TermVar = TermVar String deriving (Show, Eq, Ord, Typeable, Data)
-- |abbreviation for the pair (TermVar,Typ)
type TypedVar = (TermVar,Typ)
-- |Syntax of the terms used in the algorithm.
data Term
= Var TermVar
| Abs TermVar Typ Term
| App Term Term
| TAbs TypVar Term
| TApp Term Typ
| Nil Typ
| Cons Term Term
| LCase Term Term TermVar TermVar Term
| Fix Term
| LSeq TermVar Term Term
| Let TermVar Term Term
| Seq Term Term
| I Int
| Add Term Term
| T
| F
| BCase Term Term Term
deriving (Show, Eq, Typeable, Data)
data Constraint
= Conj Constraint Constraint
| Impl Constraint Constraint
| Leq Label Label
| Eq Label Label
| Tru
| Fls
deriving(Show, Eq, Typeable, Data)