diff options
author | Tom Smeding <tom@tomsmeding.com> | 2024-09-12 17:31:20 +0200 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2024-09-12 17:31:42 +0200 |
commit | 36732f84cfade5371248806328791d5066673fb7 (patch) | |
tree | 68cf208fca197a48e6b0506e783c1bdaf98d2e42 /src/AST | |
parent | 1f53cea6a1352db125e1897ca574360180be2550 (diff) |
Interpreter, some operations
Diffstat (limited to 'src/AST')
-rw-r--r-- | src/AST/Count.hs | 6 | ||||
-rw-r--r-- | src/AST/Pretty.hs | 29 |
2 files changed, 20 insertions, 15 deletions
diff --git a/src/AST/Count.hs b/src/AST/Count.hs index 39d26c2..6a00e83 100644 --- a/src/AST/Count.hs +++ b/src/AST/Count.hs @@ -109,11 +109,13 @@ occCountGeneral onehot unpush alter many = go WId EInl _ _ e -> re e EInr _ _ e -> re e ECase _ e a b -> re e <> (re1 a `alter` re1 b) + EConstArr{} -> mempty EBuild1 _ a b -> re a <> many (re1 b) EBuild _ _ a b -> re a <> many (re1 b) - EFold1 _ a b -> many (unpush (unpush (go (WSink .> WSink .> w) a))) <> re b + EFold1Inner _ a b -> many (unpush (unpush (go (WSink .> WSink .> w) a))) <> re b + ESum1Inner _ e -> re e EUnit _ e -> re e - -- EReplicate _ e -> re e + EReplicate1Inner _ a b -> re a <> re b EConst{} -> mempty EIdx0 _ e -> re e EIdx1 _ a b -> re a <> re b diff --git a/src/AST/Pretty.hs b/src/AST/Pretty.hs index bf0d350..2ce883b 100644 --- a/src/AST/Pretty.hs +++ b/src/AST/Pretty.hs @@ -42,11 +42,6 @@ genNameIfUsedIn' prefix ty idx ex genNameIfUsedIn :: STy a -> Idx env a -> Expr x env t -> M String genNameIfUsedIn = genNameIfUsedIn' "x" -valprj :: SList f env -> Idx env t -> f t -valprj (x `SCons` _) IZ = x -valprj (_ `SCons` env) (IS i) = valprj env i -valprj SNil i = case i of {} - ppExpr :: SList STy env -> Expr x env t -> String ppExpr senv e = fst (runM (mkVal senv >>= \val -> ppExpr' 0 val e) 1) "" where @@ -59,7 +54,7 @@ ppExpr senv e = fst (runM (mkVal senv >>= \val -> ppExpr' 0 val e) 1) "" ppExpr' :: Int -> SVal env -> Expr x env t -> M ShowS ppExpr' d val = \case - EVar _ _ i -> return $ showString $ getConst $ valprj val i + EVar _ _ i -> return $ showString $ getConst $ slistIdx val i e@ELet{} -> ppExprLet d val e @@ -97,6 +92,9 @@ ppExpr' d val = \case showString "case " . e' . showString (" of { Inl " ++ name1 ++ " -> ") . a' . showString (" ; Inr " ++ name2 ++ " -> ") . b' . showString " }" + EConstArr _ _ ty v + | Dict <- scalRepIsShow ty -> return $ showsPrec d v + EBuild1 _ a b -> do a' <- ppExpr' 11 val a name <- genNameIfUsedIn (STScal STI64) IZ b @@ -111,25 +109,30 @@ ppExpr' d val = \case return $ showParen (d > 10) $ showString "build " . a' . showString (" (\\" ++ name ++ " -> ") . e' . showString ")" - EFold1 _ a b -> do + EFold1Inner _ a b -> 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 return $ showParen (d > 10) $ - showString ("fold1 (\\" ++ name1 ++ " " ++ name2 ++ " -> ") . a' + showString ("fold1i (\\" ++ name1 ++ " " ++ name2 ++ " -> ") . a' . showString ") " . b' + ESum1Inner _ e -> do + e' <- ppExpr' 11 val e + return $ showParen (d > 10) $ showString "sum1i " . e' + EUnit _ e -> do e' <- ppExpr' 11 val e return $ showParen (d > 10) $ showString "unit " . e' - -- EReplicate _ e -> do - -- e' <- ppExpr' 11 val e - -- return $ showParen (d > 10) $ showString "replicate " . e' + EReplicate1Inner _ a b -> do + a' <- ppExpr' 11 val a + b' <- ppExpr' 11 val b + return $ showParen (d > 10) $ showString "replicate1i " . a' . showString " " . b' - EConst _ ty v -> return $ showString $ case ty of - STI32 -> show v ; STI64 -> show v ; STF32 -> show v ; STF64 -> show v ; STBool -> show v + EConst _ ty v + | Dict <- scalRepIsShow ty -> return $ showsPrec d v EIdx0 _ e -> do e' <- ppExpr' 11 val e |