thyme 0.3.1.0 → 0.3.1.1
raw patch · 11 files changed
+117/−110 lines, 11 files
Files
- src/Data/Micro.hs +0/−94
- src/Data/Thyme/Clock/Internal.hs +1/−1
- src/Data/Thyme/Clock/POSIX.hs +1/−1
- src/Data/Thyme/Format.hs +1/−1
- src/Data/Thyme/Format/Aeson.hs +13/−7
- src/Data/Thyme/Format/Human.hs +1/−1
- src/Data/Thyme/Internal/Micro.hs +95/−0
- src/Data/Thyme/LocalTime/Internal.hs +1/−1
- src/Data/Thyme/Time.hs +1/−1
- src/Data/Thyme/Time/Core.hs +1/−1
- thyme.cabal +2/−2
− src/Data/Micro.hs
@@ -1,94 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE StandaloneDeriving #-}-{-# LANGUAGE TypeFamilies #-}-{-# OPTIONS_HADDOCK hide #-}--#include "thyme.h"--module Data.Micro where--import Prelude-import Control.DeepSeq-import Data.AdditiveGroup-import Data.Basis-import Data.Data-import Data.Int-import Data.Ix-import Data.Ratio-import Data.VectorSpace-import GHC.Generics (Generic)-import System.Random-import Test.QuickCheck--#if !SHOW_INTERNAL-import Control.Monad-import Data.Char-import Data.Thyme.Format.Internal-import Numeric-import Text.ParserCombinators.ReadPrec-import Text.ParserCombinators.ReadP-import Text.Read-#endif--newtype Micro = Micro Int64 deriving (INSTANCES_MICRO)--#if SHOW_INTERNAL-deriving instance Show Micro-deriving instance Read Micro-#else-instance Show Micro where- {-# INLINEABLE showsPrec #-}- showsPrec _ (Micro a) = sign . shows si . frac where- sign = if a < 0 then (:) '-' else id- (si, su) = abs a `divMod` 1000000- frac = if su == 0 then id else (:) '.' . fills06 su . drops0 su--instance Read Micro where- {-# INLINEABLE readPrec #-}- readPrec = lift $ do- sign <- (char '-' >> return negate) `mplus` return id- s <- readS_to_P readDec- us <- (`mplus` return 0) $ do- _ <- char '.'- [(us10, "")] <- (readDec . take 7 . (++ "000000"))- `fmap` munch1 isDigit- return (div (us10 + 5) 10)- return . Micro . sign $ s * 1000000 + us-#endif--{-# INLINE toMicro #-}-toMicro :: Rational -> Micro-toMicro r = Micro (fromInteger $ 1000000 * numerator r `div` denominator r)--{-# INLINE microQuotRem #-}-{-# INLINE microDivMod #-}-microQuotRem, microDivMod :: Micro -> Micro -> (Int64, Micro)-microQuotRem (Micro a) (Micro b) = (n, Micro f) where (n, f) = quotRem a b-microDivMod (Micro a) (Micro b) = (n, Micro f) where (n, f) = divMod a b--instance AdditiveGroup Micro where- {-# INLINE zeroV #-}- zeroV = Micro 0- {-# INLINE (^+^) #-}- Micro a ^+^ Micro b = Micro (a + b)- {-# INLINE negateV #-}- negateV (Micro a) = Micro (negate a)--instance VectorSpace Micro where- type Scalar Micro = Rational- {-# INLINE (*^) #-}- s *^ Micro a = Micro . fromInteger $- toInteger a * numerator s `quot` denominator s--instance HasBasis Micro where- type Basis Micro = ()- {-# INLINE basisValue #-}- basisValue () = Micro 1000000- {-# INLINE decompose #-}- decompose (Micro a) = [((), fromIntegral a % 1000000)]- {-# INLINE decompose' #-}- decompose' (Micro a) = const (fromIntegral a % 1000000)-
src/Data/Thyme/Clock/Internal.hs view
@@ -21,7 +21,7 @@ import Data.Data import Data.Int import Data.Ix-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Thyme.Calendar.Internal import Data.VectorSpace import GHC.Generics (Generic)
src/Data/Thyme/Clock/POSIX.hs view
@@ -6,7 +6,7 @@ import Prelude import Control.Lens import Data.AdditiveGroup-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Thyme.Clock.Internal import qualified Data.Time.Clock.POSIX as T import Data.VectorSpace
src/Data/Thyme/Format.hs view
@@ -27,7 +27,7 @@ import qualified Data.ByteString.Char8 as S import Data.Char import Data.Int-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Thyme.Calendar import Data.Thyme.Calendar.Internal import Data.Thyme.Clock.Internal
src/Data/Thyme/Format/Aeson.hs view
@@ -20,10 +20,12 @@ import Data.Thyme import System.Locale --- Copypasta sans change from aeson-0.6.2.1:Data.Aeson.Types.Class--- Copyright: (c) 2011, 2012 Bryan O'Sullivan+-- Copyright: (c) 2011, 2012, 2013 Bryan O'Sullivan -- (c) 2011 MailRank, Inc. +------------------------------------------------------------------------+-- Copypasta from aeson-0.7.0.0:Data.Aeson.Types.Internal+ -- | A newtype wrapper for 'UTCTime' that uses the same non-standard -- serialization format as Microsoft .NET, whose @System.DateTime@ -- type is by default serialized to JSON as in the following example:@@ -35,11 +37,13 @@ fromDotNetTime :: UTCTime } deriving (Eq, Ord, Read, Show, Typeable, FormatTime) +------------------------------------------------------------------------+-- Copypasta from aeson-0.7.0.0:Data.Aeson.Types.Instances+ instance ToJSON DotNetTime where toJSON (DotNetTime t) =- String (pack (secs ++ msecs ++ ")/"))+ String (pack (secs ++ formatMillis t ++ ")/")) where secs = formatTime defaultTimeLocale "/Date(%s" t- msecs = take 3 $ formatTime defaultTimeLocale "%q" t {-# INLINE toJSON #-} instance FromJSON DotNetTime where@@ -54,12 +58,14 @@ instance ToJSON ZonedTime where toJSON t = String $ pack $ formatTime defaultTimeLocale format t where- format = "%FT%T" ++ milliseconds ++ tzFormat- milliseconds = take 4 $ formatTime defaultTimeLocale "%Q" t+ format = "%FT%T." ++ formatMillis t ++ tzFormat tzFormat | 0 == timeZoneMinutes (zonedTimeZone t) = "Z" | otherwise = "%z" +formatMillis :: (FormatTime t) => t -> String+formatMillis t = take 3 . formatTime defaultTimeLocale "%q" $ t+ instance FromJSON ZonedTime where parseJSON (String t) = tryFormats alternateFormats@@ -83,7 +89,7 @@ instance ToJSON UTCTime where toJSON t = String (pack (take 23 str ++ "Z"))- where str = formatTime defaultTimeLocale "%FT%T%Q" t+ where str = formatTime defaultTimeLocale "%FT%T.%q" t {-# INLINE toJSON #-} instance FromJSON UTCTime where
src/Data/Thyme/Format/Human.hs view
@@ -18,7 +18,7 @@ import Data.AdditiveGroup import Data.AffineSpace import Data.Foldable-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Monoid import Data.Thyme.Clock.Internal import Data.Thyme.TH
+ src/Data/Thyme/Internal/Micro.hs view
@@ -0,0 +1,95 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE StandaloneDeriving #-}+{-# LANGUAGE TypeFamilies #-}+{-# OPTIONS_HADDOCK hide #-}++#include "thyme.h"++-- | FOR INTERNAL USE ONLY.+module Data.Thyme.Internal.Micro where++import Prelude+import Control.DeepSeq+import Data.AdditiveGroup+import Data.Basis+import Data.Data+import Data.Int+import Data.Ix+import Data.Ratio+import Data.VectorSpace+import GHC.Generics (Generic)+import System.Random+import Test.QuickCheck++#if !SHOW_INTERNAL+import Control.Monad+import Data.Char+import Data.Thyme.Format.Internal+import Numeric+import Text.ParserCombinators.ReadPrec+import Text.ParserCombinators.ReadP+import Text.Read+#endif++newtype Micro = Micro Int64 deriving (INSTANCES_MICRO)++#if SHOW_INTERNAL+deriving instance Show Micro+deriving instance Read Micro+#else+instance Show Micro where+ {-# INLINEABLE showsPrec #-}+ showsPrec _ (Micro a) = sign . shows si . frac where+ sign = if a < 0 then (:) '-' else id+ (si, su) = abs a `divMod` 1000000+ frac = if su == 0 then id else (:) '.' . fills06 su . drops0 su++instance Read Micro where+ {-# INLINEABLE readPrec #-}+ readPrec = lift $ do+ sign <- (char '-' >> return negate) `mplus` return id+ s <- readS_to_P readDec+ us <- (`mplus` return 0) $ do+ _ <- char '.'+ [(us10, "")] <- (readDec . take 7 . (++ "000000"))+ `fmap` munch1 isDigit+ return (div (us10 + 5) 10)+ return . Micro . sign $ s * 1000000 + us+#endif++{-# INLINE toMicro #-}+toMicro :: Rational -> Micro+toMicro r = Micro (fromInteger $ 1000000 * numerator r `div` denominator r)++{-# INLINE microQuotRem #-}+{-# INLINE microDivMod #-}+microQuotRem, microDivMod :: Micro -> Micro -> (Int64, Micro)+microQuotRem (Micro a) (Micro b) = (n, Micro f) where (n, f) = quotRem a b+microDivMod (Micro a) (Micro b) = (n, Micro f) where (n, f) = divMod a b++instance AdditiveGroup Micro where+ {-# INLINE zeroV #-}+ zeroV = Micro 0+ {-# INLINE (^+^) #-}+ Micro a ^+^ Micro b = Micro (a + b)+ {-# INLINE negateV #-}+ negateV (Micro a) = Micro (negate a)++instance VectorSpace Micro where+ type Scalar Micro = Rational+ {-# INLINE (*^) #-}+ s *^ Micro a = Micro . fromInteger $+ toInteger a * numerator s `quot` denominator s++instance HasBasis Micro where+ type Basis Micro = ()+ {-# INLINE basisValue #-}+ basisValue () = Micro 1000000+ {-# INLINE decompose #-}+ decompose (Micro a) = [((), fromIntegral a % 1000000)]+ {-# INLINE decompose' #-}+ decompose' (Micro a) = const (fromIntegral a % 1000000)+
src/Data/Thyme/LocalTime/Internal.hs view
@@ -20,7 +20,7 @@ import Control.Monad import Data.AffineSpace import Data.Data-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Thyme.Calendar.Internal import Data.Thyme.Clock.Internal #if !SHOW_INTERNAL
src/Data/Thyme/Time.hs view
@@ -34,7 +34,7 @@ ) where import Prelude-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Ratio import Data.Thyme import Data.Thyme.Clock.Internal
src/Data/Thyme/Time/Core.hs view
@@ -15,7 +15,7 @@ import Control.Lens import Data.AffineSpace import Data.Int-import Data.Micro+import Data.Thyme.Internal.Micro import Data.Ratio import Data.Thyme import Data.Thyme.Calendar.OrdinalDate
thyme.cabal view
@@ -1,5 +1,5 @@ name: thyme-version: 0.3.1.0+version: 0.3.1.1 synopsis: A faster time library description: Thyme is a rewrite of the fine @time@ library, with a particular focus@@ -59,11 +59,11 @@ Data.Thyme.Format Data.Thyme.Format.Human Data.Thyme.Format.Aeson+ Data.Thyme.Internal.Micro Data.Thyme.LocalTime Data.Thyme.Time Data.Thyme.Time.Core other-modules:- Data.Micro Data.Thyme.Calendar.Internal Data.Thyme.Clock.Internal Data.Thyme.Format.Internal