summaryrefslogtreecommitdiff
path: root/src/AST.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2024-11-08 22:17:56 +0100
committerTom Smeding <tom@tomsmeding.com>2024-11-08 22:17:56 +0100
commitcbe6472a14cc0887295034bb29546dd1a1f083fd (patch)
tree2fa6a20f584d58ac3b89074673990a16cdc7d5b2 /src/AST.hs
parent4fcdb7118e0084f192753ea6c70394352a27d5ed (diff)
WIP maximum/minimum
Diffstat (limited to 'src/AST.hs')
-rw-r--r--src/AST.hs6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/AST.hs b/src/AST.hs
index 08a5bba..28c5b37 100644
--- a/src/AST.hs
+++ b/src/AST.hs
@@ -87,6 +87,8 @@ data Expr x env t where
ESum1Inner :: ScalIsNumeric t ~ True => x (TArr n (TScal t)) -> Expr x env (TArr (S n) (TScal t)) -> Expr x env (TArr n (TScal t))
EUnit :: x (TArr Z t) -> Expr x env t -> Expr x env (TArr Z t)
EReplicate1Inner :: x (TArr (S n) t) -> Expr x env TIx -> Expr x env (TArr n t) -> Expr x env (TArr (S n) t)
+ EMaximum1Inner :: ScalIsNumeric t ~ True => x (TArr n (TScal t)) -> Expr x env (TArr (S n) (TScal t)) -> Expr x env (TArr n (TScal t))
+ EMinimum1Inner :: ScalIsNumeric t ~ True => x (TArr n (TScal t)) -> Expr x env (TArr (S n) (TScal t)) -> Expr x env (TArr n (TScal t))
-- expression operations
EConst :: Show (ScalRep t) => x (TScal t) -> SScalTy t -> ScalRep t -> Expr x env (TScal t)
@@ -206,6 +208,8 @@ typeOf = \case
ESum1Inner _ e | STArr (SS n) t <- typeOf e -> STArr n t
EUnit _ e -> STArr SZ (typeOf e)
EReplicate1Inner _ _ e | STArr n t <- typeOf e -> STArr (SS n) t
+ EMaximum1Inner _ e | STArr (SS n) t <- typeOf e -> STArr n t
+ EMinimum1Inner _ e | STArr (SS n) t <- typeOf e -> STArr n t
EConst _ t _ -> STScal t
EIdx0 _ e | STArr _ t <- typeOf e -> t
@@ -282,6 +286,8 @@ subst' f w = \case
ESum1Inner x e -> ESum1Inner x (subst' f w e)
EUnit x e -> EUnit x (subst' f w e)
EReplicate1Inner x a b -> EReplicate1Inner x (subst' f w a) (subst' f w b)
+ EMaximum1Inner x e -> EMaximum1Inner x (subst' f w e)
+ EMinimum1Inner x e -> EMinimum1Inner x (subst' f w e)
EConst x t v -> EConst x t v
EIdx0 x e -> EIdx0 x (subst' f w e)
EIdx1 x a b -> EIdx1 x (subst' f w a) (subst' f w b)