summaryrefslogtreecommitdiff
path: root/src/Interpreter.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Interpreter.hs')
-rw-r--r--src/Interpreter.hs7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/Interpreter.hs b/src/Interpreter.hs
index 7be1c4b..3fb5d7b 100644
--- a/src/Interpreter.hs
+++ b/src/Interpreter.hs
@@ -23,6 +23,7 @@ import Data.Char (isSpace)
import Data.Kind (Type)
import Data.Int (Int64)
import Data.IORef
+import GHC.Stack (HasCallStack)
import System.IO.Unsafe (unsafePerformIO)
import Debug.Trace
@@ -33,7 +34,6 @@ import CHAD.Types
import Data
import Interpreter.Rep
import Data.Bifunctor (bimap)
-import GHC.Stack (HasCallStack)
newtype AcM s a = AcM { unAcM :: IO a }
@@ -95,7 +95,9 @@ interpret' env = \case
EConst _ _ v -> return v
EIdx0 _ e -> (`arrayIndexLinear` 0) <$> interpret' env e
EIdx1 _ a b -> arrayIndex1 <$> interpret' env a <*> (fromIntegral @Int64 @Int <$> interpret' env b)
- EIdx _ n a b -> arrayIndex <$> interpret' env a <*> (unTupRepIdx IxNil IxCons n <$> interpret' env b)
+ EIdx _ a b
+ | STArr n _ <- typeOf a
+ -> arrayIndex <$> interpret' env a <*> (unTupRepIdx IxNil IxCons n <$> interpret' env b)
EShape _ e | STArr n _ <- typeOf e -> tupRepIdx shUncons n . arrayShape <$> interpret' env e
EOp _ op e -> interpretOp op <$> interpret' env e
EWith e1 e2 -> do
@@ -135,6 +137,7 @@ zeroD2 typ = case typ of
STPair _ _ -> Left ()
STEither _ _ -> Left ()
STMaybe _ -> Nothing
+ STArr SZ t -> arrayUnit (zeroD2 t)
STArr n _ -> emptyArray n
STScal sty -> case sty of
STI32 -> ()