aboutsummaryrefslogtreecommitdiff
path: root/src/CHAD/AST.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2026-02-08 15:43:02 +0100
committerTom Smeding <tom@tomsmeding.com>2026-02-12 20:44:47 +0100
commit62796be35e6e768147aab70ba0beeb94c058c714 (patch)
treedd43c8c2f37c59308b6b7d503fd25420621b0ab9 /src/CHAD/AST.hs
parentc2831ef0f8be71f2a72ee4eee446e2ac473fb638 (diff)
WIP (continue in UnMonoid)
Diffstat (limited to 'src/CHAD/AST.hs')
-rw-r--r--src/CHAD/AST.hs6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/CHAD/AST.hs b/src/CHAD/AST.hs
index 3f6dfc4..bb14218 100644
--- a/src/CHAD/AST.hs
+++ b/src/CHAD/AST.hs
@@ -129,6 +129,9 @@ data Expr x env t where
EPlus :: x t -> SMTy t -> Expr x env t -> Expr x env t -> Expr x env t
EOneHot :: x t -> SMTy t -> SAcPrj p t a -> Expr x env (AcIdxS p t) -> Expr x env a -> Expr x env t
+ EIdxPair :: x (TIdxPair n t) -> SNat n -> Expr x env (Tup (Replicate n TIx)) -> Expr x env t -> Expr x env (TIdxPair n t)
+ EUnIdxPair :: x (TPair (Tup (Replicate n TIx)) t) -> Expr x env (TIdxPair n t) -> Expr x env (TPair (Tup (Replicate n TIx)) t)
+
-- interface of abstract monoidal types
ELNil :: x (TLEither a b) -> STy a -> STy b -> Expr x env (TLEither a b)
ELInl :: x (TLEither a b) -> STy b -> Expr x env a -> Expr x env (TLEither a b)
@@ -601,6 +604,9 @@ makeZeroInfo = \ty reference -> ELet ext reference $ go ty (EVar ext (fromSMTy t
go SMTMaybe{} _ = ENil ext
go (SMTArr _ t) e = emap (go t (EVar ext (fromSMTy t) IZ)) e
go SMTScal{} _ = ENil ext
+ go (SMTIdxPair _ t) e =
+ eunPair (EUnIdxPair ext e) $ \_ e1 e2 ->
+ EPair ext e1 (go t e2)
splitSparsePair
:: -- given a sparsity