From ea160e993a7196d0f5aa6749b1ea046f16cf0546 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Thu, 8 Dec 2022 00:29:48 +0200 Subject: Add "let memo" syntax for automatic memoization --- src/Utils.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/Utils.hs') diff --git a/src/Utils.hs b/src/Utils.hs index 127e7c0..e4b2333 100644 --- a/src/Utils.hs +++ b/src/Utils.hs @@ -29,8 +29,12 @@ data Config = Config { configPrintCallStack :: Bool, configUseREPL :: Bool } +data Binding a + = Regular a + | Memoized (M.Map [a] a) a + deriving Show -type Env = M.Map String AST +type Env = M.Map String (Binding AST) type Scope = [(String, AST)] data LState = LState { @@ -61,7 +65,7 @@ putEnv :: Env -> LContext () putEnv env = do modify (\s -> s { stateEnv = env }) -insertEnv :: String -> AST -> LContext () +insertEnv :: String -> Binding AST -> LContext () insertEnv k v = do env <- getEnv putEnv $ M.insert k v env -- cgit v1.3