aboutsummaryrefslogtreecommitdiff
path: root/src/Interpreter.hs
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2025-11-03 23:09:37 +0100
committerTom Smeding <tom@tomsmeding.com>2025-11-03 23:10:23 +0100
commit81d88dbc430ca6ec8390636f8b7162887b390873 (patch)
tree849c126fad3b923c2e5b815aa5c8488907bc2318 /src/Interpreter.hs
parent2ca218d2e97e521bcc49dea8f4774737ba083ede (diff)
WIP map + zip
Diffstat (limited to 'src/Interpreter.hs')
-rw-r--r--src/Interpreter.hs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/Interpreter.hs b/src/Interpreter.hs
index 9e3d2a6..d982261 100644
--- a/src/Interpreter.hs
+++ b/src/Interpreter.hs
@@ -116,6 +116,9 @@ interpret'Rec env = \case
EBuild _ dim a b -> do
sh <- unTupRepIdx ShNil ShCons dim <$> interpret' env a
arrayGenerateM sh (\idx -> interpret' (V (tTup (sreplicate dim tIx)) (tupRepIdx ixUncons dim idx) `SCons` env) b)
+ EMap _ a b -> do
+ let STArr _ t = typeOf b
+ arrayMapM (\x -> interpret' (V t x `SCons` env) a) =<< interpret' env b
EFold1Inner _ _ a b c -> do
let t = typeOf b
let f = \x y -> interpret' (V t y `SCons` V t x `SCons` env) a
@@ -150,6 +153,13 @@ interpret'Rec env = \case
sh <- unTupRepIdx ShNil ShCons dim <$> interpret' env esh
arr <- interpret' env e
return $ arrayReshape sh arr
+ EZip _ a b -> do
+ arr1 <- interpret' env a
+ arr2 <- interpret' env b
+ let sh = arrayShape arr1
+ when (sh /= arrayShape arr2) $
+ error "Interpreter: mismatched shapes in EZip"
+ return $ arrayGenerateLin sh (\i -> (arr1 `arrayIndexLinear` i, arr2 `arrayIndexLinear` i))
EFold1InnerD1 _ _ a b c -> do
let t = typeOf b
let f = \x y -> interpret' (V t y `SCons` V t x `SCons` env) a