Monadoro 0.2.5.0 → 0.2.6.0
raw patch · 5 files changed
+97/−39 lines, 5 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Monadoro: monadoro :: IO ()
Files
- Monadoro.cabal +2/−3
- app/Main.hs +89/−1
- changelog +4/−0
- src/Monadoro.hs +0/−33
- test/DocTests.hs +2/−2
Monadoro.cabal view
@@ -5,13 +5,13 @@ -- see: https://github.com/sol/hpack name: Monadoro-version: 0.2.5.0+version: 0.2.6.0 synopsis: A minimalistic CLI Pomodoro timer. description: A Pomodoro timer with two modes: single-pomodoro (default), and four-pomodoro (`--session`). category: Tools author: Patryk Kocielnik maintainer: patryk@kocielnik.pl-copyright: 2018-2020 Patryk Kocielnik+copyright: 2018-2021 Patryk Kocielnik license: MIT license-file: LICENSE build-type: Simple@@ -27,7 +27,6 @@ library exposed-modules: CountdownLoop- Monadoro ParseTime Pomodoro other-modules:
app/Main.hs view
@@ -1,6 +1,94 @@ module Main where -import Monadoro ( monadoro )+import Data.Char (isDigit)+import Data.List (intersect)+import Data.Version (showVersion)+import Paths_Monadoro (version)+import System.Environment (getArgs)+import Control.Monad (void) +import CountdownLoop (countdown)+import Pomodoro (session)+ main :: IO () main = monadoro++monadoro :: IO ()+monadoro = getArgs >>= parseArgs++parseArgs :: [String] -> IO ()+parseArgs xs+ | xs `containsEither` ["--help", "-h"] = putStrLn usage+ | xs `containsEither` ["--version", "-v"] = putStrLn . showVersion $ version+ | xs `containsEither` ["--session", "-s"] = session+ | otherwise = do+ warnAboutErrorsIfAny invalidIntervals+ runTimer validIntervals+ where (validIntervals, invalidIntervals) = checkInput xs++warnAboutErrorsIfAny :: [String] -> IO ()+warnAboutErrorsIfAny [] = return ()+warnAboutErrorsIfAny errors =+ putStrLn $ "Unable to parse as interval: " ++ show errors++{-| checkInput+ +Returns valid entries (first list) and invalid entries (second list).++>>> checkInput []+([],[])++>>> checkInput ["x"]+([],["x"])++>>> checkInput ["00:00"]+(["00:00"],[])++>>> checkInput ["00:00", "x"]+(["00:00"],["x"])++>>> checkInput ["00:00", "x"]+(["00:00"],["x"])++>>> checkInput ["00:00", "00:01", "x"]+(["00:00","00:01"],["x"])++-}++checkInput :: [String] -> ([String], [String])+checkInput [] = ([], [])+checkInput [x]+ | isValidTimeInterval x = ([x], [])+ | otherwise = ([], [x])+checkInput (x:xs) = (validEntries, invalidEntries)+ where+ validEntries =+ fst (checkInput [x]) ++ fst (checkInput xs)+ invalidEntries =+ snd (checkInput [x]) ++ snd (checkInput xs)++{-| isValidTimeInterval++>>> isValidTimeInterval "x"+False++>>> isValidTimeInterval "00:00"+True++-}++isValidTimeInterval :: String -> Bool+isValidTimeInterval (m1:m2:':':s1:[s2])+ | all isDigit [m1, m2, s1, s2] = True+isValidTimeInterval _ = False++containsEither :: (Eq a) => [a] -> [a] -> Bool+containsEither a = not . null . intersect a++usage :: String+usage = "Usage: monadoro [-vh] [--session] [INTERVAL [...]]"++runTimer :: [String] -> IO ()+runTimer [] = void (countdown "25:00")+runTimer [t] = void (countdown t)+runTimer (t:ts) = parseArgs [t] >> parseArgs ts
changelog view
@@ -1,3 +1,7 @@+monadoro (2.6.0)++ * Filter invalid time intervals from input.+ monadoro (2.5.0) * Clean up lots of dead code.
− src/Monadoro.hs
@@ -1,33 +0,0 @@-module Monadoro (monadoro) where--import Data.List (intersect)-import Data.Version (showVersion)-import Paths_Monadoro (version)-import System.Environment (getArgs)--import CountdownLoop (countdown)-import Pomodoro (session)--main :: IO ()-main = monadoro--monadoro :: IO ()-monadoro = getArgs >>= parseArgs--parseArgs :: [String] -> IO ()-parseArgs xs - | xs `containsAnyOf` ["--help", "-h"] = putStrLn usage- | xs `containsAnyOf` ["--version", "-v"] = putStrLn . showVersion $ version- | xs `containsAnyOf` ["--session", "-s"] = session- | otherwise = runTimer xs--containsAnyOf :: (Eq a) => [a] -> [a] -> Bool-containsAnyOf a = not . null . intersect a--usage :: String-usage = "Usage: monadoro [-vh] [--session] [INTERVAL [...]]"--runTimer :: [String] -> IO ()-runTimer [] = countdown "25:00" >> return ()-runTimer (t:[]) = countdown t >> return ()-runTimer (t:ts) = parseArgs [t] >> parseArgs ts
test/DocTests.hs view
@@ -4,7 +4,7 @@ main :: IO () main = doctest ["-isrc",+ "app/Main.hs", "src/ParseTime.lhs", "src/CountdownLoop.hs",- "src/Pomodoro.lhs",- "src/Monadoro.hs"]+ "src/Pomodoro.lhs"]