Skip to content

Commit ce5427d

Browse files
committed
Never Run This Commit As Root (Yes, I was being sarcastic.)
1 parent 4d02d04 commit ce5427d

File tree

3 files changed

+29
-11
lines changed

3 files changed

+29
-11
lines changed

app/Main.hs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ module Main (main) where
66
import System.Environment (getArgs)
77

88
import WhileParser (tokenize, readFileContent, runASTParser) -- WhileAST(..),
9-
import WhileEvaluation (eval, evalT, evalM) --, evalM, VarName, VarVal, VarState, VarStateWorld)
9+
import WhileEvaluation (eval, evalT, evalM, getVST, runEvalM)
10+
--, evalM, VarName, VarVal, VarState, VarStateWorld)
1011

1112

1213
-- | Define a data type to represent the command-line options
@@ -37,10 +38,19 @@ runInterpreter options = do
3738
-- print ast
3839

3940
putStrLn "\ESC[92m[RESULT OF EVALUATION]\ESC[0m"
40-
let a = eval ast []
41-
print a
4241

43-
print $ evalT ast []
42+
-- print $ eval ast [] -- eval v1
43+
-- print $ evalT ast [] -- eval v2
44+
45+
let program = evalM ast -- Monad eval
46+
print $ getVST program []
47+
48+
-- eg.
49+
-- let program2 = evalM ast >> evalM ast
50+
-- print $ getVST program2 []
51+
52+
-- or use:
53+
-- print $ runEvalM ast []
4454

4555
putStrLn $ "\n" ++ concat (replicate 40 "= ") ++ "=\n"
4656

shell.nix

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,13 @@ pkgs.mkShell {
66
buildInputs = with pkgs; [
77
stack
88
ghc
9+
ghcid
910
hlint
1011

11-
#(python313.withPackages(ps: with ps; [
12-
# pre-commit
13-
# pre-commit-hooks
14-
#]))
15-
1612
pre-commit
1713
];
1814

1915
shellHook = ''
20-
# python -m pre-commit --version
21-
# pre-commit --version
2216
echo "Start developing..."
2317
'';
2418
}

src/WhileEvaluation.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ module WhileEvaluation
1212
,VarVal
1313
,VarState
1414
,VarStateWorld
15+
,VarStateM(..)
16+
,runEvalM
1517
) where
1618

1719
import Data.List (nub)
@@ -31,6 +33,7 @@ type VarStateWorld = [VarState]
3133
-- | Variable State Transformer
3234
type VarStateT a = VarStateWorld -> (a, VarStateWorld)
3335

36+
3437
infixl 1 >>>=
3538
(>>>=) :: VarStateT a -> (a -> VarStateT b) -> VarStateT b
3639
vst >>>= f = uncurry f . vst
@@ -48,6 +51,13 @@ instance Applicative VarStateM where
4851
instance Monad VarStateM where
4952
vst >>= f = VarStateM (getVST vst >>>= getVST . f)
5053

54+
55+
-- getState :: VarStateM VarStateWorld
56+
-- getState = VarStateM (\s -> (s, s))
57+
58+
-- putState :: VarStateWorld -> VarStateM ()
59+
-- putState s = VarStateM (const ((), s))
60+
5161
--------------------------------------------------------------------------------
5262

5363
lookUpVarState :: VarName -> VarStateWorld -> Int
@@ -116,3 +126,7 @@ evalT ast w = ((), eval ast w)
116126

117127
evalM :: WhileAST -> VarStateM ()
118128
evalM = VarStateM . evalT
129+
130+
131+
runEvalM :: WhileAST -> VarStateWorld -> ((), VarStateWorld)
132+
runEvalM ast = getVST $ evalM ast

0 commit comments

Comments
 (0)