diff options
Diffstat (limited to 'src/Interpreter.hs')
-rw-r--r-- | src/Interpreter.hs | 7 |
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 -> () |