Created
May 27, 2015 11:43
-
-
Save shigemk2/6cf776c25f522fb251da 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 | |
main = do | |
(command:argList) <- getArgs | |
-- print (command:argList) | |
dispatch command argList | |
add :: [String] -> IO () | |
add [fileName, todoItem] = appendFile fileName (todoItem ++ "\n") | |
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 | |
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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment