packages feed

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