relevant-time 0.1.0.0 → 0.1.1.0
raw patch · 2 files changed
+60/−31 lines, 2 filesdep ~aesondep ~basedep ~chronosnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aeson, base, chronos, text, torsor
API changes (from Hackage documentation)
+ Data.RelevantTime: instance GHC.Classes.Ord Data.RelevantTime.RelevantTime
+ Data.RelevantTime: instance GHC.Generics.Generic Data.RelevantTime.RelevantTime
+ Data.RelevantTime: relativizeAbsoluteTime :: Time -> Time -> RelevantTime
Files
- Data/RelevantTime.hs +30/−7
- relevant-time.cabal +30/−24
Data/RelevantTime.hs view
@@ -1,20 +1,23 @@-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE OverloadedStrings #-}+{-# language DeriveGeneric #-}+{-# language LambdaCase #-}+{-# language OverloadedStrings #-} -{-# OPTIONS_GHC -Wall #-}+{-# options_ghc -Wall #-} module Data.RelevantTime ( RelevantTime(..) , encodeRelevantTime , decodeRelevantTime , absolutizeRelevantTime+ , relativizeAbsoluteTime ) where import Data.Text (Text) import Data.Aeson (ToJSON(..),FromJSON(..)) import Data.Int (Int64) import Chronos.Types (Time)-import Torsor (add,invert,scale)+import Torsor (add,difference,invert,scale)+import GHC.Generics (Generic) import qualified Chronos as CH import qualified Data.Text as T import qualified Data.Text.Read as TR@@ -27,7 +30,7 @@ | RelevantTimeNow | RelevantTimeMidnight | RelevantTimeNoon- deriving (Eq,Show)+ deriving (Eq,Ord,Generic,Show) instance ToJSON RelevantTime where toJSON = AE.String . encodeRelevantTime@@ -56,16 +59,36 @@ 'm' -> RelevantTimeMinute <$> readInt (T.init t) 'h' -> RelevantTimeHour <$> readInt (T.init t) 'd' -> RelevantTimeDay <$> readInt (T.init t)+ 'w' -> RelevantTimeDay <$> (fmap ((*) 7 ) $ readInt (T.init t))+ 'M' -> RelevantTimeDay <$> (fmap ((*) 30) $ readInt (T.init t)) _ -> Nothing absolutizeRelevantTime :: Time -> RelevantTime -> Time-absolutizeRelevantTime now x = case x of+absolutizeRelevantTime now = \case RelevantTimeNow -> now- RelevantTimeNoon-> add (scale 12 CH.hour) (CH.dayToTimeMidnight (CH.timeToDayTruncate now))+ RelevantTimeNoon -> add (scale 12 CH.hour) (CH.dayToTimeMidnight (CH.timeToDayTruncate now)) RelevantTimeMidnight -> CH.dayToTimeMidnight (CH.timeToDayTruncate now) RelevantTimeMinute n -> add (invert (scale n CH.minute)) now RelevantTimeHour n -> add (invert (scale n CH.hour)) now RelevantTimeDay n -> add (invert (scale n CH.day)) now++relativizeAbsoluteTime :: Time -> Time -> RelevantTime+relativizeAbsoluteTime now abst+ | absolutizeRelevantTime now RelevantTimeNoon == abst = RelevantTimeNoon+ | absolutizeRelevantTime now RelevantTimeMidnight == abst = RelevantTimeMidnight+ | diff < (CH.getTimespan CH.minute) = RelevantTimeNow+ | diff <= (CH.getTimespan CH.minute) * 59 = RelevantTimeMinute $ round $ (toFrac diff) / (minute * nanoseconds)+ | diff <= (CH.getTimespan CH.hour) * 23 = RelevantTimeHour $ round $ (toFrac diff) / (hour * nanoseconds)+ | otherwise = RelevantTimeDay $ round $ (toFrac diff) / (day * nanoseconds)+ where+ diff :: Int64+ diff = (abs $ CH.getTimespan (now `difference` abst))+ toFrac :: Int64 -> Rational+ toFrac = fromIntegral . abs+ minute = 60+ hour = 60 * minute+ day = 24 * hour+ nanoseconds = 1000000000 readInt :: Text -> Maybe Int64 readInt x = case TR.signed TR.decimal x of
relevant-time.cabal view
@@ -1,26 +1,32 @@-name: relevant-time-version: 0.1.0.0-synopsis: humanised relevant time-description: Humans tend to think of time relative to a fixed point.- This library offers a simple datatype, 'RelevantTime',- which captures the logic behind that idea.-homepage: https://github.com/chessai/relevant-time.git-license: BSD3-license-file: LICENSE-author: Daniel Cartwright-maintainer: dcartwright@layer3com.com-copyright: copyright (c) Layer 3 Communications, Daniel Cartwright -category: Data -build-type: Simple-extra-source-files: ChangeLog.md-cabal-version: >=1.10+name: relevant-time+version: 0.1.1.0+synopsis: humanised relevant time+description: + Humans tend to think of time relative to a fixed point.+ This library offers a simple datatype, 'RelevantTime',+ which captures the logic behind that idea.+homepage: https://github.com/chessai/relevant-time.git+license: BSD3+license-file: LICENSE+author: Daniel Cartwright+maintainer: dcartwright@layer3com.com+copyright: copyright (c) Layer 3 Communications, Daniel Cartwright +category: Data +build-type: Simple+extra-source-files: ChangeLog.md+cabal-version: >=1.10 library- exposed-modules: Data.RelevantTime- other-extensions: LambdaCase, OverloadedStrings- build-depends: base >=4.7 && <5.0- , aeson- , chronos- , text- , torsor- default-language: Haskell2010+ exposed-modules: Data.RelevantTime+ other-extensions: LambdaCase, OverloadedStrings+ build-depends: + base >=4.8 && <5.0+ , aeson >= 1.0 && < 1.5+ , text >= 1.2 && < 1.3+ , chronos >= 1.0 && < 1.1+ , torsor >= 0.1 && < 0.2+ default-language: Haskell2010++source-repository head+ type: git+ location: https://github.com/layer-3-communications/relevant-time