From 0dccdc0a956cbbd1237a5e473c9e83f374520e70 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Sat, 28 Sep 2024 15:13:45 +0200 Subject: [PATCH] :sparkles: --- a4/a4.cabal | 35 ++++++++++ a4/a4.pdf | Bin 0 -> 97347 bytes a4/runtests.hs | 5 ++ a4/src/APL/AST.hs | 27 ++++++++ a4/src/APL/Eval.hs | 73 +++++++++++++++++++++ a4/src/APL/InterpIO.hs | 70 ++++++++++++++++++++ a4/src/APL/InterpPure.hs | 16 +++++ a4/src/APL/Interp_Tests.hs | 95 +++++++++++++++++++++++++++ a4/src/APL/Monad.hs | 129 +++++++++++++++++++++++++++++++++++++ a4/src/APL/Util.hs | 99 ++++++++++++++++++++++++++++ 10 files changed, 549 insertions(+) create mode 100644 a4/a4.cabal create mode 100644 a4/a4.pdf create mode 100644 a4/runtests.hs create mode 100644 a4/src/APL/AST.hs create mode 100644 a4/src/APL/Eval.hs create mode 100644 a4/src/APL/InterpIO.hs create mode 100644 a4/src/APL/InterpPure.hs create mode 100644 a4/src/APL/Interp_Tests.hs create mode 100644 a4/src/APL/Monad.hs create mode 100644 a4/src/APL/Util.hs diff --git a/a4/a4.cabal b/a4/a4.cabal new file mode 100644 index 0000000..720f403 --- /dev/null +++ b/a4/a4.cabal @@ -0,0 +1,35 @@ +cabal-version: 3.0 +name: a4 +version: 1.0.0.0 +build-type: Simple + +common common + default-language: Haskell2010 + ghc-options: -Wall + +library + import: common + hs-source-dirs: src + build-depends: + base + , tasty + , tasty-hunit + , process + , directory + exposed-modules: + APL.AST + APL.Eval + APL.InterpPure + APL.InterpIO + APL.Interp_Tests + APL.Monad + APL.Util + +test-suite a4-test + import: common + type: exitcode-stdio-1.0 + main-is: runtests.hs + build-depends: + base + , tasty + , a4 diff --git a/a4/a4.pdf b/a4/a4.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7769f65cdbb52dfeea9c601db0fcb0d180607407 GIT binary patch literal 97347 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 z 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≺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 Integer -> EvalM Integer) -> Exp -> Exp -> EvalM Val +evalIntBinOp f e1 e2 = do + v1 <- eval e1 + v2 <- eval e2 + case (v1, v2) of + (ValInt x, ValInt y) -> ValInt <$> f x y + (_, _) -> failure "Non-integer operand" + +evalIntBinOp' :: (Integer -> Integer -> Integer) -> Exp -> Exp -> EvalM Val +evalIntBinOp' f e1 e2 = + evalIntBinOp f' e1 e2 + where + f' x y = pure $ f x y + +-- Replace with your 'eval' from your solution to assignment 2. +eval :: Exp -> EvalM Val +eval (CstInt x) = pure $ ValInt x +eval (CstBool b) = pure $ ValBool b +eval (Var v) = do + env <- askEnv + case envLookup v env of + Just x -> pure x + Nothing -> failure $ "Unknown variable: " ++ v +eval (Add e1 e2) = evalIntBinOp' (+) e1 e2 +eval (Sub e1 e2) = evalIntBinOp' (-) e1 e2 +eval (Mul e1 e2) = evalIntBinOp' (*) e1 e2 +eval (Div e1 e2) = evalIntBinOp checkedDiv e1 e2 + where + checkedDiv _ 0 = failure "Division by zero" + checkedDiv x y = pure $ x `div` y +eval (Pow e1 e2) = evalIntBinOp checkedPow e1 e2 + where + checkedPow x y = + if y < 0 + then failure "Negative exponent" + else pure $ x ^ y +eval (Eql e1 e2) = do + v1 <- eval e1 + v2 <- eval e2 + case (v1, v2) of + (ValInt x, ValInt y) -> pure $ ValBool $ x == y + (ValBool x, ValBool y) -> pure $ ValBool $ x == y + (_, _) -> failure "Invalid operands to equality" +eval (If cond e1 e2) = do + cond' <- eval cond + case cond' of + ValBool True -> eval e1 + ValBool False -> eval e2 + _ -> failure "Non-boolean conditional." +eval (Let var e1 e2) = do + v1 <- eval e1 + localEnv (envExtend var v1) $ eval e2 +eval (Lambda var body) = do + env <- askEnv + pure $ ValFun env var body +eval (Apply e1 e2) = do + v1 <- eval e1 + v2 <- eval e2 + case (v1, v2) of + (ValFun f_env var body, arg) -> + localEnv (const $ envExtend var arg f_env) $ eval body + (_, _) -> + failure "Cannot apply non-function" +eval (TryCatch e1 e2) = + eval e1 `catch` eval e2 diff --git a/a4/src/APL/InterpIO.hs b/a4/src/APL/InterpIO.hs new file mode 100644 index 0000000..4d44b0f --- /dev/null +++ b/a4/src/APL/InterpIO.hs @@ -0,0 +1,70 @@ +module APL.InterpIO (runEvalIO) where + +import APL.Monad +import APL.Util +import System.Directory (removeFile) +import System.IO (hFlush, readFile', stdout) + +-- Converts a string into a value. Only 'ValInt's and 'ValBool' are supported. +readVal :: String -> Maybe Val +readVal = unserialize + +-- 'prompt s' prints 's' to the console and then reads a line from stdin. +prompt :: String -> IO String +prompt s = do + putStr s + hFlush stdout + getLine + +-- 'writeDB dbFile s' writes the 'State' 's' to the file 'db'. +writeDB :: FilePath -> State -> IO () +writeDB db s = + writeFile db $ serialize s + +-- 'readDB db' reads the database stored in 'db'. +readDB :: FilePath -> IO (Either Error State) +readDB db = do + ms <- readFile' db + case unserialize ms of + Just s -> pure $ pure s + Nothing -> pure $ Left "Invalid DB." + +-- 'copyDB db1 db2' copies 'db1' to 'db2'. +copyDB :: FilePath -> FilePath -> IO () +copyDB db db' = do + s <- readFile' db + writeFile db' s + +-- Removes all key-value pairs from the database file. +clearDB :: IO () +clearDB = writeFile dbFile "" + +-- The name of the database file. +dbFile :: FilePath +dbFile = "db.txt" + +-- Creates a fresh temporary database, passes it to a function returning an +-- IO-computation, executes the computation, deletes the temporary database, and +-- finally returns the result of the computation. The temporary database file is +-- guaranteed fresh and won't have a name conflict with any other files. +withTempDB :: (FilePath -> IO a) -> IO a +withTempDB m = do + tempDB <- newTempDB -- Create a new temp database file. + res <- m tempDB -- Run the computation with the new file. + removeFile tempDB -- Delete the temp database file. + pure res -- Return the result of the computation. + +runEvalIO :: EvalM a -> IO (Either Error a) +runEvalIO evalm = do + clearDB + runEvalIO' envEmpty dbFile evalm + where + runEvalIO' :: Env -> FilePath -> EvalM a -> IO (Either Error a) + runEvalIO' _ _ (Pure x) = pure $ pure x + runEvalIO' r db (Free (ReadOp k)) = runEvalIO' r db $ k r + runEvalIO' r db (Free (StateGetOp k)) = error "TODO in Task 3" + runEvalIO' r db (Free (StatePutOp s m)) = error "TODO in Task 3" + runEvalIO' r db (Free (PrintOp p m)) = do + putStrLn p + runEvalIO' r db m + runEvalIO' _ _ (Free (ErrorOp e)) = pure $ Left e diff --git a/a4/src/APL/InterpPure.hs b/a4/src/APL/InterpPure.hs new file mode 100644 index 0000000..d084feb --- /dev/null +++ b/a4/src/APL/InterpPure.hs @@ -0,0 +1,16 @@ +module APL.InterpPure (runEval) where + +import APL.Monad + +runEval :: EvalM a -> ([String], Either Error a) +runEval = runEval' envEmpty stateInitial + where + runEval' :: Env -> State -> EvalM a -> ([String], Either Error a) + runEval' _ _ (Pure x) = ([], pure x) + runEval' r s (Free (ReadOp k)) = runEval' r s $ k r + runEval' r s (Free (StateGetOp k)) = runEval' r s $ k s + runEval' r _ (Free (StatePutOp s' m)) = runEval' r s' m + runEval' r s (Free (PrintOp p m)) = + let (ps, res) = runEval' r s m + in (p : ps, res) + runEval' _ _ (Free (ErrorOp e)) = ([], Left e) diff --git a/a4/src/APL/Interp_Tests.hs b/a4/src/APL/Interp_Tests.hs new file mode 100644 index 0000000..66fc71e --- /dev/null +++ b/a4/src/APL/Interp_Tests.hs @@ -0,0 +1,95 @@ +module APL.Interp_Tests (tests) where + +import APL.AST (Exp (..)) +import APL.Eval (eval) +import APL.InterpIO (runEvalIO) +import APL.InterpPure (runEval) +import APL.Monad +import APL.Util (captureIO) +import Test.Tasty (TestTree, testGroup) +import Test.Tasty.HUnit (testCase, (@?=)) + +eval' :: Exp -> ([String], Either Error Val) +eval' = runEval . eval + +evalIO' :: Exp -> IO (Either Error Val) +evalIO' = runEvalIO . eval + +tests :: TestTree +tests = testGroup "Free monad interpreters" [pureTests, ioTests] + +pureTests :: TestTree +pureTests = + testGroup + "Pure interpreter" + [ testCase "localEnv" $ + runEval + ( localEnv (const [("x", ValInt 1)]) $ + askEnv + ) + @?= ([], Right [("x", ValInt 1)]), + -- + testCase "Let" $ + eval' (Let "x" (Add (CstInt 2) (CstInt 3)) (Var "x")) + @?= ([], Right (ValInt 5)), + -- + testCase "Let (shadowing)" $ + eval' + ( Let + "x" + (Add (CstInt 2) (CstInt 3)) + (Let "x" (CstBool True) (Var "x")) + ) + @?= ([], Right (ValBool True)), + -- + testCase "State" $ + runEval + ( do + putState [(ValInt 0, ValInt 1)] + modifyState $ map (\(key, _) -> (key, ValInt 5)) + getState + ) + @?= ([], Right [(ValInt 0, ValInt 5)]), + -- + testCase "Print" $ + runEval (evalPrint "test") + @?= (["test"], Right ()), + -- + testCase "Error" $ + runEval + ( do + _ <- failure "Oh no!" + evalPrint "test" + ) + @?= ([], Left "Oh no!"), + -- + testCase "Div0" $ + eval' (Div (CstInt 7) (CstInt 0)) + @?= ([], Left "Division by zero") + ] + +ioTests :: TestTree +ioTests = + testGroup + "IO interpreter" + [ testCase "print" $ do + let s1 = "Lalalalala" + s2 = "Weeeeeeeee" + (out, res) <- + captureIO [] $ + runEvalIO $ do + evalPrint s1 + evalPrint s2 + (out, res) @?= ([s1, s2], Right ()) + -- NOTE: This test will give a runtime error unless you replace the + -- version of `eval` in `APL.Eval` with a complete version that supports + -- `Print`-expressions. Uncomment at your own risk. + -- testCase "print 2" $ do + -- (out, res) <- + -- captureIO [] $ + -- evalIO' $ + -- Print "This is also 1" $ + -- Print "This is 1" $ + -- CstInt 1 + -- (out, res) @?= (["This is 1: 1", "This is also 1: 1"], Right $ ValInt 1) + ] diff --git a/a4/src/APL/Monad.hs b/a4/src/APL/Monad.hs new file mode 100644 index 0000000..3f26e76 --- /dev/null +++ b/a4/src/APL/Monad.hs @@ -0,0 +1,129 @@ +module APL.Monad + ( envEmpty, + envExtend, + envLookup, + stateInitial, + askEnv, + modifyEffects, + localEnv, + getState, + putState, + modifyState, + evalPrint, + catch, + failure, + evalKvGet, + evalKvPut, + transaction, + EvalM, + Val (..), + EvalOp (..), + Free (..), + Error, + Env, + State, + ) +where + +import APL.AST (Exp (..), VName) +import Control.Monad (ap) + +data Val + = ValInt Integer + | ValBool Bool + | ValFun Env VName Exp + deriving (Eq, Show) + +type Error = String + +type Env = [(VName, Val)] + +envEmpty :: Env +envEmpty = [] + +envExtend :: VName -> Val -> Env -> Env +envExtend v val env = (v, val) : env + +envLookup :: VName -> Env -> Maybe Val +envLookup v env = lookup v env + +type State = [(Val, Val)] + +stateInitial :: State +stateInitial = [] + +data Free e a + = Pure a + | Free (e (Free e a)) + +instance (Functor e) => Functor (Free e) where + fmap f (Pure x) = Pure $ f x + fmap f (Free g) = Free $ fmap (fmap f) g + +instance (Functor e) => Applicative (Free e) where + pure = Pure + (<*>) = ap + +instance (Functor e) => Monad (Free e) where + Pure x >>= f = f x + Free g >>= f = Free $ h <$> g + where + h x = x >>= f + +data EvalOp a + = ReadOp (Env -> a) + | StateGetOp (State -> a) + | StatePutOp State a + | PrintOp String a + | ErrorOp Error + +instance Functor EvalOp where + fmap f (ReadOp k) = ReadOp $ f . k + fmap f (StateGetOp k) = StateGetOp $ f . k + fmap f (StatePutOp s m) = StatePutOp s $ f m + fmap f (PrintOp p m) = PrintOp p $ f m + fmap _ (ErrorOp e) = ErrorOp e + +type EvalM a = Free EvalOp a + +askEnv :: EvalM Env +askEnv = Free $ ReadOp $ \env -> pure env + +modifyEffects :: (Functor e, Functor h) => (e (Free e a) -> h (Free e a)) -> Free e a -> Free h a +modifyEffects _ (Pure x) = Pure x +modifyEffects g (Free e) = Free $ modifyEffects g <$> g e + +localEnv :: (Env -> Env) -> EvalM a -> EvalM a +localEnv f = modifyEffects g + where + g (ReadOp k) = ReadOp $ k . f + g op = op + +getState :: EvalM State +getState = Free $ StateGetOp $ \s -> pure s + +putState :: State -> EvalM () +putState s = Free $ StatePutOp s $ pure () + +modifyState :: (State -> State) -> EvalM () +modifyState f = do + s <- getState + putState $ f s + +evalPrint :: String -> EvalM () +evalPrint p = Free $ PrintOp p $ pure () + +failure :: String -> EvalM a +failure = Free . ErrorOp + +catch :: EvalM a -> EvalM a -> EvalM a +catch = error "TODO" + +evalKvGet :: Val -> EvalM Val +evalKvGet = error "TODO" + +evalKvPut :: Val -> Val -> EvalM () +evalKvPut = error "TODO" + +transaction :: EvalM () -> EvalM () +transaction = error "TODO" diff --git a/a4/src/APL/Util.hs b/a4/src/APL/Util.hs new file mode 100644 index 0000000..3e76bd8 --- /dev/null +++ b/a4/src/APL/Util.hs @@ -0,0 +1,99 @@ +{-# LANGUAGE FlexibleInstances #-} + +module APL.Util + ( Serialize (..), + newTempDB, + captureIO, + ) +where + +import APL.Monad +import Control.Concurrent (threadDelay) +import Control.Exception (bracket) +import Control.Monad (guard) +import Data.Char (isDigit) +import Data.List (stripPrefix) +import Data.Maybe (mapMaybe) +import GHC.IO.Handle (hDuplicate, hDuplicateTo) +import System.Directory (listDirectory) +import System.IO +import System.Process (createPipe) +import Text.Read (readMaybe) + +class Serialize a where + serialize :: a -> String + unserialize :: String -> Maybe a + +instance Serialize Val where + serialize (ValInt x) = "ValInt " <> show x + serialize (ValBool b) = "ValBool " <> show b + serialize ValFun {} = error "ValFun serialization is not supported." + + unserialize s = + case words s of + ["ValInt", rest] + | all isDigit rest -> ValInt <$> readMaybe rest + ["ValBool", rest] -> ValBool <$> readMaybe rest + _ -> Nothing + +instance (Serialize a, Serialize b) => Serialize (a, b) where + serialize (a, b) = + serialize a ++ "," ++ serialize b + unserialize s = + case span (/= ',') s of + (s_a, _ : s_b) -> (,) <$> unserialize s_a <*> unserialize s_b + _ -> Nothing + +instance Serialize [(Val, Val)] where + serialize kv = + unlines $ map serialize kv + unserialize = + mapM unserialize . lines + +newTempDB :: IO FilePath +newTempDB = do + files <- listDirectory "." + let n = maximum (0 : mapMaybe match files) + 1 + tempFile = "temp" ++ show n ++ ".txt" + writeFile tempFile "" + pure $ tempFile + where + match :: FilePath -> Maybe Int + match s = do + s' <- stripPrefix "temp" s + let (n_s, rest) = (takeWhile isDigit s', dropWhile isDigit s') + guard $ rest == ".txt" + readMaybe n_s + +captureIO :: [String] -> IO a -> IO ([String], a) +captureIO inputs m = do + hFlush stdout + threadDelay 50000 -- Needed to make sure things are actually flushed + stdin' <- hDuplicate stdin + stdout' <- hDuplicate stdout + + (inR, inW) <- createPipe + (outR, outW) <- createPipe + + hSetBuffering inW NoBuffering + hSetBuffering outW NoBuffering + + bracket + ( do + inR `hDuplicateTo` stdin + outW `hDuplicateTo` stdout + ) + ( \_ -> do + stdin' `hDuplicateTo` stdin + stdout' `hDuplicateTo` stdout + mapM_ hClose [stdin', stdout', inR, inW, outW] + ) + ( \_ -> do + mapM_ (hPutStrLn inW) inputs + hFlush inW + + res <- m + + output <- hGetContents outR -- hGetContents closes outR + pure (lines output, res) + )