@@ -23,19 +23,21 @@ module Text.Megaparsec.Time
23
23
) where
24
24
25
25
import Control.Applicative (optional , (<|>) )
26
- import Control.Monad (replicateM , void )
26
+ import Control.Monad (replicateM )
27
27
import Control.Monad.Combinators (choice , some )
28
28
import Data.Char (toLower )
29
29
import Data.Functor (($>) )
30
30
import Data.Maybe (fromMaybe )
31
31
import Data.Time (Day , DayOfWeek (.. ),
32
32
NominalDiffTime , TimeOfDay (.. ),
33
- defaultTimeLocale , parseTimeM ,
33
+ defaultTimeLocale ,
34
+ makeTimeOfDayValid , parseTimeM ,
34
35
secondsToNominalDiffTime )
35
36
import Text.Megaparsec (Parsec , takeRest , try )
36
37
import Text.Megaparsec.Char (char , digitChar , space , space1 ,
37
38
string' )
38
39
import Text.Megaparsec.Utils (posNumParser )
40
+ import Text.Printf (printf )
39
41
40
42
-- | Representation of a parser result with either a number of days relative to
41
43
-- the current day, or a 'DayOfWeek'.
@@ -125,7 +127,10 @@ timeParser = do
125
127
h <- read <$> replicateM 2 digitChar <* char ' :'
126
128
m <- read <$> replicateM 2 digitChar
127
129
128
- return $ TimeOfDay h m 0
130
+ maybe
131
+ (fail (printf " invalid hours or minutes %02d:%02d" h m))
132
+ pure
133
+ (makeTimeOfDayValid h m 0 )
129
134
130
135
-- | Zero seconds in 'NominalDiffTime'.
131
136
zero :: NominalDiffTime
0 commit comments