packages feed

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 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"]