summaryrefslogtreecommitdiff
path: root/src/AST
diff options
context:
space:
mode:
authorTom Smeding <t.j.smeding@uu.nl>2025-03-20 18:32:22 +0100
committerTom Smeding <t.j.smeding@uu.nl>2025-03-20 18:32:22 +0100
commitd030802dd6d960afa80ac84a5580a46d39c02822 (patch)
tree0c40e8eea6fe12cab0bd74e5e4f457e13bbf9afd /src/AST
parent146a846f799f63cd98eee2149c417686adba17a9 (diff)
Commutativity marker on fold1i
Diffstat (limited to 'src/AST')
-rw-r--r--src/AST/Count.hs2
-rw-r--r--src/AST/Pretty.hs6
-rw-r--r--src/AST/UnMonoid.hs2
3 files changed, 6 insertions, 4 deletions
diff --git a/src/AST/Count.hs b/src/AST/Count.hs
index c0d8d2d..dc8ec72 100644
--- a/src/AST/Count.hs
+++ b/src/AST/Count.hs
@@ -115,7 +115,7 @@ occCountGeneral onehot unpush alter many = go WId
EMaybe _ a b e -> re a <> re1 b <> re e
EConstArr{} -> mempty
EBuild _ _ a b -> re a <> many (re1 b)
- EFold1Inner _ a b c -> many (unpush (unpush (go (WSink .> WSink .> w) a))) <> re b <> re c
+ EFold1Inner _ _ a b c -> many (unpush (unpush (go (WSink .> WSink .> w) a))) <> re b <> re c
ESum1Inner _ e -> re e
EUnit _ e -> re e
EReplicate1Inner _ a b -> re a <> re b
diff --git a/src/AST/Pretty.hs b/src/AST/Pretty.hs
index b9406d7..527a7ca 100644
--- a/src/AST/Pretty.hs
+++ b/src/AST/Pretty.hs
@@ -150,14 +150,16 @@ ppExpr' d val expr = case expr of
<> hardline <> e')
(ppApp (annotate AHighlight (ppString "build") <> ppX expr) [a', ppLam [ppString name] e'])
- EFold1Inner _ a b c -> do
+ EFold1Inner _ cm a b c -> do
name1 <- genNameIfUsedIn (typeOf a) (IS IZ) a
name2 <- genNameIfUsedIn (typeOf a) IZ a
a' <- ppExpr' 0 (Const name2 `SCons` Const name1 `SCons` val) a
b' <- ppExpr' 11 val b
c' <- ppExpr' 11 val c
+ let opname = case cm of Commut -> "fold1i(C)"
+ Noncommut -> "fold1i"
return $ ppParen (d > 10) $
- ppApp (annotate AHighlight (ppString "fold1i") <> ppX expr) [ppLam [ppString name1, ppString name2] a', b', c']
+ ppApp (annotate AHighlight (ppString opname) <> ppX expr) [ppLam [ppString name1, ppString name2] a', b', c']
ESum1Inner _ e -> do
e' <- ppExpr' 11 val e
diff --git a/src/AST/UnMonoid.hs b/src/AST/UnMonoid.hs
index ae9728a..b30f7a0 100644
--- a/src/AST/UnMonoid.hs
+++ b/src/AST/UnMonoid.hs
@@ -29,7 +29,7 @@ unMonoid = \case
EMaybe _ a b e -> EMaybe ext (unMonoid a) (unMonoid b) (unMonoid e)
EConstArr _ n t x -> EConstArr ext n t x
EBuild _ n a b -> EBuild ext n (unMonoid a) (unMonoid b)
- EFold1Inner _ a b c -> EFold1Inner ext (unMonoid a) (unMonoid b) (unMonoid c)
+ EFold1Inner _ cm a b c -> EFold1Inner ext cm (unMonoid a) (unMonoid b) (unMonoid c)
ESum1Inner _ e -> ESum1Inner ext (unMonoid e)
EUnit _ e -> EUnit ext (unMonoid e)
EReplicate1Inner _ a b -> EReplicate1Inner ext (unMonoid a) (unMonoid b)