dates 0.1.1.0 → 0.1.1.1
raw patch · 2 files changed
+20/−12 lines, 2 files
Files
- Data/Dates.hs +19/−11
- dates.cabal +1/−1
Data/Dates.hs view
@@ -5,7 +5,8 @@ Time (..), parseDate, pDate,- getCurrentDateTime+ getCurrentDateTime,+ tryRead ) where import Prelude.Unicode@@ -65,6 +66,13 @@ tSecond ∷ Int } deriving (Eq,Ord,Show,Data,Typeable) +-- | Parser version of Prelude.read+tryRead :: Read a => String -> Parsec String st a+tryRead str =+ case reads str of+ [(res, "")] -> return res+ _ -> fail $ "Cannot read: " ++ str+ -- | Get current date and time. getCurrentDateTime ∷ IO DateTime getCurrentDateTime = do@@ -115,7 +123,7 @@ number ∷ Int → Int → Parsec String st Int number n m = do- t ← read `fmap` (n `times` digit)+ t ← tryRead =<< (n `times` digit) if t > m then fail "number too large" else return t@@ -273,7 +281,7 @@ pDateInterval ∷ Parsec String st DateIntervalType pDateInterval = do s ← choice $ map maybePlural ["day", "week", "month", "year"]- return $ read s+ tryRead s pRelDate ∷ DateTime → Parsec String st DateTime pRelDate date = do@@ -287,10 +295,10 @@ char ' ' tp ← pDateInterval case tp of- Day → return $ Days (read n)- Week → return $ Weeks (read n)- Month → return $ Months (read n)- Year → return $ Years (read n)+ Day → Days `fmap` tryRead n+ Week → Weeks `fmap` tryRead n+ Month → Months `fmap` tryRead n+ Year → Years `fmap` tryRead n passDate ∷ Parsec String st DateInterval passDate = do@@ -299,10 +307,10 @@ tp ← pDateInterval string " ago" case tp of- Day → return $ Days $ - (read n)- Week → return $ Weeks $ - (read n)- Month → return $ Months $ - (read n)- Year → return $ Years $ - (read n)+ Day → (Days . negate) `fmap` tryRead n+ Week → (Weeks . negate) `fmap` tryRead n+ Month → (Months . negate) `fmap` tryRead n+ Year → (Years . negate) `fmap` tryRead n today ∷ Parsec String st DateInterval today = do
dates.cabal view
@@ -1,5 +1,5 @@ name: dates-version: 0.1.1.0+version: 0.1.1.1 synopsis: Small library for parsing different dates formats. description: This package allows to parse many different formats of dates. Both absolute and relative dates are supported.