Created
May 27, 2015 11:46
-
-
Save shigemk2/7f4cf08a3cf95569a8a8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import System.Environment | |
import System.Directory | |
import System.IO | |
import Data.List | |
import Control.Exception | |
dispatch :: String -> [String] -> IO () | |
dispatch "add" = add | |
dispatch "view" = view | |
dispatch "remove" = remove | |
dispatch command = doesntExist command | |
doesntExist :: String -> [String] -> IO () | |
doesntExist command _ = | |
putStrLn $ "The " ++ command ++ " command doesn't exist" | |
main = do | |
(command:argList) <- getArgs | |
-- print (command:argList) | |
dispatch command argList | |
add :: [String] -> IO () | |
add [fileName, todoItem] = appendFile fileName (todoItem ++ "\n") | |
add _ = putStrLn "The add command takes exactly two arguments" | |
view :: [String] -> IO () | |
view [fileName] = do | |
contents <- readFile fileName | |
let todoTasks = lines contents | |
numberedTasks = zipWith (\n line -> show n ++ " - " ++ line) | |
[0..] todoTasks | |
putStr $ unlines numberedTasks | |
view _ = putStrLn "The add command takes exactly two arguments" | |
remove :: [String] -> IO () | |
remove [fileName, numberString] = do | |
contents <- readFile fileName | |
let todoTasks = lines contents | |
numberedTasks = zipWith (\n line -> show n ++ " - " ++ line) | |
[0..] todoTasks | |
putStrLn "These are your TO-DO items:" | |
mapM_ putStrLn numberedTasks | |
let number = read numberString | |
newTodoItems = unlines $ delete (todoTasks !! number) todoTasks | |
bracketOnError (openTempFile "." "temp") | |
(\(tempName, tempHandle) -> do | |
hClose tempHandle | |
removeFile tempName) | |
(\(tempName, tempHandle) -> do | |
hPutStr tempHandle newTodoItems | |
hClose tempHandle | |
-- ハードコード修正 | |
-- removeFile "todo.txt" | |
-- renameFile tempName "todo.txt") | |
removeFile fileName | |
renameFile tempName fileName) | |
remove _ = putStrLn "The add command takes exactly two arguments" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment