diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-08 00:29:48 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-08 00:39:06 +0200 |
| commit | ea160e993a7196d0f5aa6749b1ea046f16cf0546 (patch) | |
| tree | 96f4b92fa4293ced54d2bf1125efa969c70f9c2e /src/Utils.hs | |
| parent | 05fcc94a561335a6502fc98c3737a7e851d1285a (diff) | |
Add "let memo" syntax for automatic memoization
Diffstat (limited to 'src/Utils.hs')
| -rw-r--r-- | src/Utils.hs | 8 |
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 |
