ddc-core-tetra-0.4.1.1: DDC/Core/Tetra/Prim/Base.hs
module DDC.Core.Tetra.Prim.Base
( Name (..)
, isNameHole
, isNameLit
, TyConTetra (..)
, DaConTetra (..)
, OpStore (..)
, PrimTyCon (..)
, PrimArith (..)
, PrimCast (..))
where
import Data.Typeable
import DDC.Core.Salt.Name
( PrimTyCon (..)
, PrimArith (..)
, PrimCast (..))
-- | Names of things used in Disciple Core Tetra.
data Name
-- | User defined variables.
= NameVar String
-- | A user defined constructor.
| NameCon String
-- | Baked-in type constructors.
| NameTyConTetra TyConTetra
-- | Baked-in data constructors.
| NameDaConTetra DaConTetra
-- | Baked-in operators.
| NameOpStore OpStore
-- Machine primitives ------------------
-- | A primitive type constructor.
| NamePrimTyCon PrimTyCon
-- | Primitive arithmetic, logic, comparison and bit-wise operators.
| NamePrimArith PrimArith
-- | Primitive numeric casting operators.
| NamePrimCast PrimCast
-- Literals -----------------------------
-- | A boolean literal.
| NameLitBool Bool
-- | A natural literal.
| NameLitNat Integer
-- | An integer literal.
| NameLitInt Integer
-- | A word literal.
| NameLitWord Integer Int
-- Inference ----------------------------
-- | Hole used during type inference.
| NameHole
deriving (Eq, Ord, Show, Typeable)
-- | Check whether a name is `NameHole`.
isNameHole :: Name -> Bool
isNameHole nn
= case nn of
NameHole -> True
_ -> False
-- | Check whether a name represents some literal value.
isNameLit :: Name -> Bool
isNameLit nn
= case nn of
NameLitBool{} -> True
NameLitNat{} -> True
NameLitInt{} -> True
NameLitWord{} -> True
_ -> False
-- TyConTetra ----------------------------------------------------------------
-- | Baked-in type constructors.
data TyConTetra
-- | @Ref#@. Mutable reference.
= TyConTetraRef
-- | @TupleN#@. Tuples.
| TyConTetraTuple Int
-- | @B#@. Boxing type constructor.
-- Used to represent boxed numeric values.
| TyConTetraB
-- | @U#@. Unboxed type constructor.
-- Used to represent unboxed numeric values.
| TyConTetraU
deriving (Eq, Ord, Show)
-- DaConTetra ----------------------------------------------------------------
-- | Data Constructors.
data DaConTetra
-- | @TN#@. Tuple data constructors.
= DaConTetraTuple Int
deriving (Eq, Ord, Show)
-- OpStore -------------------------------------------------------------------
-- | Mutable References.
data OpStore
= OpStoreAllocRef -- ^ Allocate a reference.
| OpStoreReadRef -- ^ Read a reference.
| OpStoreWriteRef -- ^ Write to a reference.
deriving (Eq, Ord, Show)