From 5bdaa1e4ffe40add10f000ee993e6b500c419a37 Mon Sep 17 00:00:00 2001 From: Joe Zhao Date: Sat, 9 Aug 2014 10:58:03 +0800 Subject: add files from home for previous chapters and sandboxes --- todo.hs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 todo.hs (limited to 'todo.hs') diff --git a/todo.hs b/todo.hs new file mode 100644 index 0000000..2cb21c1 --- /dev/null +++ b/todo.hs @@ -0,0 +1,52 @@ +import System.Environment +import System.Directory +import System.IO +import Data.List +import Control.Exception +import Control.Monad(when) + +fileName = "todo.txt" + +dispatch :: String -> String -> IO () +dispatch file "add" = add file +dispatch file "view" = view file +dispatch file "rm" = remove file +dispatch file _ = do + putStrLn "Operations supported:\nadd - Append Item\nview - Inspect Item\nrm - Remove Item" + +view file = do + contents <- readFile file + let todoTasks = lines contents + putStr $ unlines $ number todoTasks + +add file = do + todoItem <- getLine + when (not $ null todoItem) (do + appendFile file todoItem) + +remove file = do + contents <- readFile file + numberString <- getLine + let todoTasks = lines contents + number = read numberString + newTodoList = unlines $ delete (todoTasks !! number) todoTasks + bracketOnError (openTempFile "." "temp") + (\(tempName,tempHandle) -> do + hClose tempHandle + removeFile tempName) + (\(tempName,tempHandle) -> do + hPutStr tempHandle newTodoList + hClose tempHandle + removeFile file + renameFile tempName file) + + +number task = zipWith (\n line -> show n ++ " - " ++ line) [0..] task + +main = do + line <- getLine + if null line then return () + else (do + dispatch fileName line + main) + -- cgit v1.2.3-70-g09d2