@@ -1,4 +1,4 @@
1−{-# LANGUAGE BangPatterns, ScopedTypeVariables, CPP #-}
1+{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
22
33-- |
44-- Module: Data.Aeson.Parser.Time
@@ -22,6 +22,7 @@ module Data.Aeson.Parser.Time
2222
2323import Control.Applicative ((<$>), (<*>), (<*), (*>))
2424import Control.Monad (when, void)
25+import Data.Aeson.Functions (toPico)
2526import Data.Attoparsec.Text as A
2627import Data.Bits ((.&.))
2728import Data.Char (isDigit, ord)
@@ -35,22 +36,6 @@ import qualified Data.Aeson.Types.Internal as Aeson
3536import qualified Data.Text as T
3637import qualified Data.Time.LocalTime as Local
3738
38−#if MIN_VERSION_base(4,7,0)
39−
40−import Data.Fixed (Fixed(MkFixed))
41−
42−mkPico :: Integer -> Pico
43−mkPico = MkFixed
44−
45−#else
46−
47−import Unsafe.Coerce
48−
49−mkPico :: Integer -> Pico
50−mkPico = unsafeCoerce
51−
52−#endif
53−
5439-- | Run an attoparsec parser as an aeson parser.
5540run :: Parser a -> Text -> Aeson.Parser a
5641run p t = case A.parseOnly (p <* endOfInput) t of
@@ -97,7 +82,7 @@ seconds = do
9782 return $! parsePicos real t
9883 _ -> return $! fromIntegral real
9984 where
100− parsePicos a0 t = mkPico (fromIntegral (t' * 10^n))
85+ parsePicos a0 t = toPico (fromIntegral (t' * 10^n))
10186 where T n t' = T.foldl' step (T 12 (fromIntegral a0)) t
10287 step ma@(T m a) c
10388 | m <= 0 = ma