generalize parseDuration so it can be used in the ReadM monad
This commit is contained in:
parent
7d9072d1db
commit
b59b8be737
1 changed files with 3 additions and 3 deletions
|
@ -17,7 +17,6 @@ module Utility.HumanTime (
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Utility.PartialPrelude
|
import Utility.PartialPrelude
|
||||||
import Utility.Applicative
|
|
||||||
import Utility.QuickCheck
|
import Utility.QuickCheck
|
||||||
|
|
||||||
import qualified Data.Map as M
|
import qualified Data.Map as M
|
||||||
|
@ -45,8 +44,8 @@ daysToDuration :: Integer -> Duration
|
||||||
daysToDuration i = Duration $ i * dsecs
|
daysToDuration i = Duration $ i * dsecs
|
||||||
|
|
||||||
{- Parses a human-input time duration, of the form "5h", "1m", "5h1m", etc -}
|
{- Parses a human-input time duration, of the form "5h", "1m", "5h1m", etc -}
|
||||||
parseDuration :: String -> Maybe Duration
|
parseDuration :: Monad m => String -> m Duration
|
||||||
parseDuration = Duration <$$> go 0
|
parseDuration = maybe parsefail (return . Duration) . go 0
|
||||||
where
|
where
|
||||||
go n [] = return n
|
go n [] = return n
|
||||||
go n s = do
|
go n s = do
|
||||||
|
@ -56,6 +55,7 @@ parseDuration = Duration <$$> go 0
|
||||||
u <- M.lookup c unitmap
|
u <- M.lookup c unitmap
|
||||||
go (n + num * u) rest
|
go (n + num * u) rest
|
||||||
_ -> return $ n + num
|
_ -> return $ n + num
|
||||||
|
parsefail = fail "duration parse error; expected eg \"5m\" or \"1h5m\""
|
||||||
|
|
||||||
fromDuration :: Duration -> String
|
fromDuration :: Duration -> String
|
||||||
fromDuration Duration { durationSeconds = d }
|
fromDuration Duration { durationSeconds = d }
|
||||||
|
|
Loading…
Add table
Reference in a new issue