packages feed

time-qq 0.0.0.2 → 0.0.1.0

raw patch · 3 files changed

+44/−5 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Time.QQ: instance Lift Day
- Data.Time.QQ: instance Lift DiffTime
- Data.Time.QQ: instance Lift UTCTime
- Data.Time.QQ: utctDay :: UTCTime -> Day
- Data.Time.QQ: utctDayTime :: UTCTime -> DiffTime
+ Data.Time.QQ: TimeZone :: Int -> Bool -> String -> TimeZone
+ Data.Time.QQ: [timeZoneMinutes] :: TimeZone -> Int
+ Data.Time.QQ: [timeZoneName] :: TimeZone -> String
+ Data.Time.QQ: [timeZoneSummerOnly] :: TimeZone -> Bool
+ Data.Time.QQ: [utctDayTime] :: UTCTime -> DiffTime
+ Data.Time.QQ: [utctDay] :: UTCTime -> Day
+ Data.Time.QQ: data TimeZone :: *
+ Data.Time.QQ: instance Language.Haskell.TH.Syntax.Lift Data.Time.Calendar.Days.Day
+ Data.Time.QQ: instance Language.Haskell.TH.Syntax.Lift Data.Time.Clock.Scale.DiffTime
+ Data.Time.QQ: instance Language.Haskell.TH.Syntax.Lift Data.Time.Clock.UTC.UTCTime
+ Data.Time.QQ: instance Language.Haskell.TH.Syntax.Lift Data.Time.LocalTime.TimeZone.TimeZone
+ Data.Time.QQ: timeZone :: QuasiQuoter
+ Data.Time.QQ: timeZoneFormat :: String -> QuasiQuoter

Files

lib/Data/Time/QQ.hs view
@@ -28,16 +28,22 @@     utcIso8601,     utcIso8601ms, +    -- * TimeZone QuasiQuoters+    timeZone,+     -- * Re-exports     UTCTime(..),+    TimeZone(..),      -- * Specify your own formats     utcFormat,+    timeZoneFormat, ) where  import Data.Time.Calendar import Data.Time.Clock import Data.Time.Format+import Data.Time.LocalTime import Data.Time.Locale.Compat (defaultTimeLocale) import Language.Haskell.TH import Language.Haskell.TH.Quote@@ -63,11 +69,28 @@ utcIso8601 :: QuasiQuoter utcIso8601 = utcFormat "%Y-%m-%d" +-- | Timezones from a reference string, to a 'TimeZone'.+--+-- >>> [timeZone| BST |] :: TimeZone+-- BST+timeZone :: QuasiQuoter+timeZone = timeZoneFormat "%Z"+ -- | Build a 'UTCTime' QuasiQuoter for a given format string, as per -- 'readTime'. utcFormat :: String -> QuasiQuoter-utcFormat format = QuasiQuoter-    { quoteExp   = utcExp format+utcFormat = timeFormat utcExp++-- | Build a 'TimeZone' QuasiQuoter for a given format string, as per+-- 'readTime'.+timeZoneFormat :: String -> QuasiQuoter+timeZoneFormat = timeFormat timeZoneExp++-- | Build a QuasiQuoter for a given format string given the format interpreter,+-- as per 'readTime'.+timeFormat :: (String -> String -> ExpQ) -> String -> QuasiQuoter+timeFormat formatter format = QuasiQuoter+    { quoteExp   = formatter format     , quotePat   = const $ error "No quotePat defined for any Data.Time.QQ QQ"     , quoteType  = const $ error "No quoteType defined for any Data.Time.QQ QQ"     , quoteDec   = const $ error "No quoteDec defined for any Data.Time.QQ QQ"@@ -76,9 +99,14 @@ -- | Parse a time as per the format and produce a 'UTCTime' 'ExpQ'. utcExp :: String -> String -> ExpQ utcExp format input =-    let x = readTime defaultTimeLocale format input :: UTCTime+    let x = parseTimeOrError True defaultTimeLocale format input :: UTCTime     in x `seq` [| x |] +-- | Parse a time as per the format and produce a 'TimeZone 'ExpQ'.+timeZoneExp :: String -> String -> ExpQ+timeZoneExp format input =+    let x = parseTimeOrError True defaultTimeLocale format input :: TimeZone+    in x `seq` [| x |]  -- * Instances for lifting times @@ -94,4 +122,11 @@ instance Lift Day where     lift x = [| toEnum $(lift $ fromEnum x) |] +-- * Instance for lifting timezones +instance Lift TimeZone where+    lift (TimeZone minutes summer name) = do+        minutes' <- lift minutes+        summer' <- lift summer+        name' <- lift name+        return $ ConE (mkName "TimeZone") `AppE` minutes' `AppE` summer' `AppE` name'
tests/unit.hs view
@@ -18,7 +18,7 @@ main = hspec suite  suite :: Spec-suite =+suite = do     describe "UTC QQs" $ do         it "has correct output #1" $             show [utcIso8601| 2048-12-01  |]@@ -29,3 +29,7 @@         it "has correct output #3" $             show [utcIso8601ms| 2099-01-01T00:00:00 |]                 `shouldBe` "2099-01-01 00:00:00 UTC"+    describe "TimeZone QQs" $ do+        it "Shows British Summer Time" $+            show [timeZone| BST |]+                `shouldBe` "BST"
time-qq.cabal view
@@ -1,5 +1,5 @@ name:                time-qq-version:             0.0.0.2+version:             0.0.1.0 synopsis:            Quasi-quoter for UTCTime times description:         Quasi-quoter for UTCTime times homepage:            https://github.com/christian-marie/time-qq