From ebcad257717ddae2ca49394b581ed8de35866fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Darijus=20Dau=C5=BEvardis?= Date: Wed, 27 Nov 2024 00:51:29 +0000 Subject: [PATCH] sync 3/4 --- .devcontainer/Dockerfile | 1 + .devcontainer/devcontainer.json | 2 +- .history | 14 +-- src/Lessons/Lesson12.hs | 192 ++++++++++++++++---------------- 4 files changed, 105 insertions(+), 104 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 51c795d..818d1ee 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -12,6 +12,7 @@ RUN apt-get update -y \ libgmp3-dev \ libncurses5-dev \ libncursesw5-dev \ + zlib1g-dev \ && rm -rf /var/lib/apt/lists/ ENV PATH=/root/.ghcup/bin:/root/.local/bin:$PATH \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1f21bc5..f0d7eb2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,5 +1,5 @@ { - "image": "vipo/ghcup:9.4.8-4", + "image": "vipo/ghcup:9.4.8-5", "customizations": { "vscode": { "extensions": [ diff --git a/.history b/.history index d797c35..7ef7f8f 100644 --- a/.history +++ b/.history @@ -1,3 +1,10 @@ +list +remove 1 +remove 2 +list +add "Title", John Doe, Sci-Fi, 2001, 123 +add +ad list remove 2 remove -7 @@ -91,10 +98,3 @@ add "Title", jonas jonaitis , Thriller, 2002 , 51.1. add "Title", jonas jonaitis , Thriller, 2002 , 51.1v5 add "Title", jonas jonaitis , Thriller, 2002 , 51.154 add "Title", jonas jonaitis , Thriller, 2002 , 51.1544 -add "Title", jonas jonaitis , Thriller, 2002 , 51.15 -add "Title", jonas jonaitis , Thriller, 2002 , 51.1 5 -add "Title", jonas jonaitis , Thriller, 2002 , 51.1 -add "Title", jonas jonaitis , Thriller, 2002 , 51.1 -add "Title", jonas jonaitis , Thriller, 2002 , 51. -add "Title", jonas jonaitis , Thriller, 2002 , 51 . 5 -add "Title", jonas jonaitis , Thriller, 2002 , 51 . diff --git a/src/Lessons/Lesson12.hs b/src/Lessons/Lesson12.hs index 7ff7e38..f5c490f 100644 --- a/src/Lessons/Lesson12.hs +++ b/src/Lessons/Lesson12.hs @@ -16,101 +16,101 @@ import Control.Monad.Trans.State.Strict(State, StateT, get, put, runState, runSt import GHC.IORef (IORef(IORef)) -data MyDomainAlgebra next = Load (() -> next) - | Add Int (() -> next) - | Dump (String -> next) - | Save (() -> next) +--data MyDomainAlgebra next = Load (() -> next) +-- | Add Int (() -> next) +-- | Dump (String -> next) +-- | Save (() -> next) +-- +-- +---- >>> id 4 +--type MyDomain = Free MyDomainAlgebra +--load :: MyDomain () +--load = liftF $ Load id +-- +--add :: Int -> MyDomain () +--add i = liftF $ Add i id +-- +--dump :: MyDomain String +--dump = liftF $ Dump id +-- +--save :: MyDomain (String, String) +--save = liftF $ Save id +-- +--program :: MyDomain (String, String) +--program = do +-- load +-- b <- dump +-- add (1 + 1) +-- add 10 +-- a <- dump +-- save +-- return (b,a) --- >>> id 4 -type MyDomain = Free MyDomainAlgebra -load :: MyDomain () -load = liftF $ Load id - -add :: Int -> MyDomain () -add i = liftF $ Add i id - -dump :: MyDomain String -dump = liftF $ Dump id - -save :: MyDomain (String, String) -save = liftF $ Save id - -program :: MyDomain (String, String) -program = do - load - b <- dump - add (1 + 1) - add 10 - a <- dump - save - return (b,a) - - -runIOLog :: MyDomain a -> IO a -runIOLog (Pure a) = return a -runIOLog (Free step) = do - next <- runStep step - runIOLog next - where - runStep :: MyDomainAlgebra a -> IO a - runStep (Load next) = do - putStrLn "LOAD" - return $ next () - runStep (Add i next) = do - putStrLn "ADD" ++ show i - return $ next () - runStep (Dump next) = do - putStrLn "DUMP" - return $ next "fake State" - runStep (Save next) = do - putStrLn "SAVE" - return # next () - -runWithState :: MyDomain a -> State (Int, String) a -runWithState (Pure a) = return a -runWithState (Free step) = do - next <- runStep step - runWithState next - where - runStep :: MyDomainAlgebra a -> State (Int, String) a - runStep (Load next) = do - (_, f) <- get - put (read f, f) - return $ next () - runStep (Add i next) = do - (s, f) <- get - put (s + i, f) - return $ next () - runStep (Dump next) = do - (_, f) <- get - return $ next f - runStep (Save next) = do - (s, _) <- get - put (s, show s) - return # next () - - -runIO :: MyDomain a -> IO a -runIO p = do - v <- newIORef 0 - runIO' v p - where - runIO' :: IORef Int -> MyDomain a -> IO a - runIO' _ (Pure a) -> return a - runIO' v (Free step) -> do - next <- runStep step - runIO' v next - runStep :: IORef Int -> MyDomainAlgebra a -> IO a - runStep v (Load next) = do - a <- S. - return $ next () - runStep v (Add i next) = do - putStrLn "ADD" ++ show i - return $ next () - runStep v (Dump next) = do - putStrLn "DUMP" - return $ next "fake State" - runStep v (Save next) = do - putStrLn "SAVE" - return # next () \ No newline at end of file +--runIOLog :: MyDomain a -> IO a +--runIOLog (Pure a) = return a +--runIOLog (Free step) = do +-- next <- runStep step +-- runIOLog next +-- where +-- runStep :: MyDomainAlgebra a -> IO a +-- runStep (Load next) = do +-- putStrLn "LOAD" +-- return $ next () +-- runStep (Add i next) = do +-- putStrLn "ADD" ++ show i +-- return $ next () +-- runStep (Dump next) = do +-- putStrLn "DUMP" +-- return $ next "fake State" +-- runStep (Save next) = do +-- putStrLn "SAVE" +-- return # next () +-- +--runWithState :: MyDomain a -> State (Int, String) a +--runWithState (Pure a) = return a +--runWithState (Free step) = do +-- next <- runStep step +-- runWithState next +-- where +-- runStep :: MyDomainAlgebra a -> State (Int, String) a +-- runStep (Load next) = do +-- (_, f) <- get +-- put (read f, f) +-- return $ next () +-- runStep (Add i next) = do +-- (s, f) <- get +-- put (s + i, f) +-- return $ next () +-- runStep (Dump next) = do +-- (_, f) <- get +-- return $ next f +-- runStep (Save next) = do +-- (s, _) <- get +-- put (s, show s) +-- return # next () +-- +-- +--runIO :: MyDomain a -> IO a +--runIO p = do +-- v <- newIORef 0 +-- runIO' v p +-- where +-- runIO' :: IORef Int -> MyDomain a -> IO a +-- runIO' _ (Pure a) -> return a +-- runIO' v (Free step) -> do +-- next <- runStep step +-- runIO' v next +-- runStep :: IORef Int -> MyDomainAlgebra a -> IO a +-- runStep v (Load next) = do +-- a <- S. +-- return $ next () +-- runStep v (Add i next) = do +-- putStrLn "ADD" ++ show i +-- return $ next () +-- runStep v (Dump next) = do +-- putStrLn "DUMP" +-- return $ next "fake State" +-- runStep v (Save next) = do +-- putStrLn "SAVE" +-- return # next () \ No newline at end of file