summaryrefslogtreecommitdiff
path: root/src/AST/Pretty.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2024-11-08 12:37:51 +0100
committerTom Smeding <tom@tomsmeding.com>2024-11-08 12:37:51 +0100
commit83692cf41f76272423445c9cbbad65561ee3b50c (patch)
tree49f56f498a68722a7302b4ce0b41402a9b9da9ef /src/AST/Pretty.hs
parent58d4d0b47f5e609e21132f48b727de37d06b6777 (diff)
WIP custom derivatives
Diffstat (limited to 'src/AST/Pretty.hs')
-rw-r--r--src/AST/Pretty.hs17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/AST/Pretty.hs b/src/AST/Pretty.hs
index 76424fe..bac267d 100644
--- a/src/AST/Pretty.hs
+++ b/src/AST/Pretty.hs
@@ -14,7 +14,9 @@ import Data.Functor.Const
import AST
import AST.Count
+import CHAD.Types
import Data
+import ForwardAD.DualNumbers.Types
type SVal = SList (Const String)
@@ -175,6 +177,21 @@ ppExpr' d val = \case
(Prefix, s) -> s
return $ showParen (d > 10) $ showString (ops ++ " ") . e'
+ ECustom _ t1 t2 a b c e1 e2 -> do
+ pn1 <- genNameIfUsedIn t1 (IS IZ) a
+ pn2 <- genNameIfUsedIn t2 IZ a
+ fn1 <- genNameIfUsedIn t1 (IS IZ) b
+ fn2 <- genNameIfUsedIn (dn t2) IZ b
+ rn1 <- genNameIfUsedIn (d1 t1) (IS (IS IZ)) c
+ rn2 <- genNameIfUsedIn (d1 t2) (IS IZ) c
+ rn3 <- genNameIfUsedIn' "d" (d2 (typeOf a)) IZ c
+ a' <- ppExpr' 11 (Const pn2 `SCons` Const pn1 `SCons` SNil) a
+ b' <- ppExpr' 11 (Const fn2 `SCons` Const fn1 `SCons` SNil) b
+ c' <- ppExpr' 11 (Const rn3 `SCons` Const rn2 `SCons` Const rn1 `SCons` SNil) c
+ e1' <- ppExpr' 11 val e1
+ e2' <- ppExpr' 11 val e2
+ return $ showParen (d > 10) $ showString "custom " . a' . showString " " . b' . showString " " . c' . showString " " . e1' . showString " " . e2'
+
EWith e1 e2 -> do
e1' <- ppExpr' 11 val e1
name <- genNameIfUsedIn' "ac" (STAccum (typeOf e1)) IZ e2