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 +38/−3
- tests/unit.hs +5/−1
- time-qq.cabal +1/−1
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