aboutsummaryrefslogtreecommitdiffstats
path: root/src/Utils.hs
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2022-12-08 00:29:48 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2022-12-08 00:39:06 +0200
commitea160e993a7196d0f5aa6749b1ea046f16cf0546 (patch)
tree96f4b92fa4293ced54d2bf1125efa969c70f9c2e /src/Utils.hs
parent05fcc94a561335a6502fc98c3737a7e851d1285a (diff)
Add "let memo" syntax for automatic memoization
Diffstat (limited to 'src/Utils.hs')
-rw-r--r--src/Utils.hs8
1 files changed, 6 insertions, 2 deletions
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