module DDC.Source.Tetra.Prim.Base
(
Name (..)
, PrimName (..)
, pattern NameType
, pattern NameVal
, PrimType (..)
, pattern NameTyCon
, pattern NameTyConTetra
, PrimTyCon (..)
, PrimTyConTetra(..)
, pattern NameTyConTetraTuple
, pattern NameTyConTetraVector
, pattern NameTyConTetraF
, pattern NameTyConTetraC
, pattern NameTyConTetraU
, PrimVal (..)
, pattern NameLit
, pattern NameArith
, pattern NameVector
, pattern NameFun
, pattern NameError
, PrimArith (..)
, OpVector (..)
, OpFun (..)
, OpError (..)
, PrimLit (..)
, pattern NameLitBool
, pattern NameLitNat
, pattern NameLitInt
, pattern NameLitSize
, pattern NameLitWord
, pattern NameLitFloat
, pattern NameLitTextLit)
where
import DDC.Core.Tetra
( OpFun (..)
, OpVector (..)
, OpError (..)
, PrimTyCon (..)
, PrimArith (..))
import Data.Text (Text)
data Name
= NameVar !String
| NameCon !String
| NamePrim !PrimName
| NameHole
deriving (Eq, Ord, Show)
data PrimName
= PrimNameType !PrimType
| PrimNameVal !PrimVal
deriving (Eq, Ord, Show)
pattern NameType p = NamePrim (PrimNameType p)
pattern NameVal p = NamePrim (PrimNameVal p)
data PrimType
= PrimTypeTyCon !PrimTyCon
| PrimTypeTyConTetra !PrimTyConTetra
deriving (Eq, Ord, Show)
pattern NameTyCon tc = NamePrim (PrimNameType (PrimTypeTyCon tc))
pattern NameTyConTetra tc = NamePrim (PrimNameType (PrimTypeTyConTetra tc))
data PrimTyConTetra
= PrimTyConTetraTuple !Int
| PrimTyConTetraVector
| PrimTyConTetraF
| PrimTyConTetraC
| PrimTyConTetraU
deriving (Eq, Ord, Show)
pattern NameTyConTetraTuple i = NameTyConTetra (PrimTyConTetraTuple i)
pattern NameTyConTetraVector = NameTyConTetra PrimTyConTetraVector
pattern NameTyConTetraF = NameTyConTetra PrimTyConTetraF
pattern NameTyConTetraC = NameTyConTetra PrimTyConTetraC
pattern NameTyConTetraU = NameTyConTetra PrimTyConTetraU
data PrimVal
= PrimValLit !PrimLit
| PrimValArith !PrimArith
| PrimValError !OpError
| PrimValVector !OpVector
| PrimValFun !OpFun
deriving (Eq, Ord, Show)
pattern NameLit p = NamePrim (PrimNameVal (PrimValLit p))
pattern NameArith p = NamePrim (PrimNameVal (PrimValArith p))
pattern NameError p = NamePrim (PrimNameVal (PrimValError p))
pattern NameVector p = NamePrim (PrimNameVal (PrimValVector p))
pattern NameFun p = NamePrim (PrimNameVal (PrimValFun p))
data PrimLit
= PrimLitBool !Bool
| PrimLitNat !Integer
| PrimLitInt !Integer
| PrimLitSize !Integer
| PrimLitWord !Integer !Int
| PrimLitFloat !Double !Int
| PrimLitTextLit !Text
deriving (Eq, Ord, Show)
pattern NameLitBool x = NameLit (PrimLitBool x)
pattern NameLitNat x = NameLit (PrimLitNat x)
pattern NameLitInt x = NameLit (PrimLitInt x)
pattern NameLitSize x = NameLit (PrimLitSize x)
pattern NameLitWord x s = NameLit (PrimLitWord x s)
pattern NameLitFloat x s = NameLit (PrimLitFloat x s)
pattern NameLitTextLit x = NameLit (PrimLitTextLit x)