git.iko.soy/typeable/postgresql-simple
on master help sign in
Move Time.Implementation to use <>
commitd1b44bf66dbe241a20522a5696b6706870aa739a authorLeon P Smith <leon@melding-monads.com> dateSat 4 Apr 2015, 03:47 (12 years ago) parentcd784ea
1 file changed+24−27
src/Database/PostgreSQL/Simple/Time/Implementation.hs+24−27
src/Database/PostgreSQL/Simple/Time/Implementation.hs+24−27
@@ -12,7 +12,7 @@
1212
1313module Database.PostgreSQL.Simple.Time.Implementation where
1414
15−import Prelude hiding (take, (++))
15+import Prelude hiding (take)
1616import Data.ByteString.Builder(Builder, byteString, char8, integerDec)
1717import Control.Arrow((***))
1818import Control.Applicative
@@ -24,14 +24,11 @@ import Data.Time hiding (getTimeZone, getZonedTime)
2424import Data.Typeable
2525import Data.Word(Word8)
2626import qualified Data.Attoparsec.ByteString.Char8 as A
27+import Database.PostgreSQL.Simple.Compat ((<>))
2728import Data.Monoid(Monoid(..))
2829import Data.Fixed (Pico)
2930import Unsafe.Coerce
3031
31−(++) :: Monoid a => a -> a -> a
32−(++) = mappend
33−infixr 5 ++
34−
3532data Unbounded a
3633 = NegInfinity
3734 | Finite !a
@@ -41,9 +38,9 @@ data Unbounded a
4138instance Show a => Show (Unbounded a) where
4239 showsPrec prec x rest
4340 = case x of
44− NegInfinity -> "-infinity" ++ rest
41+ NegInfinity -> "-infinity" <> rest
4542 Finite time -> showsPrec prec time rest
46− PosInfinity -> "infinity" ++ rest
43+ PosInfinity -> "infinity" <> rest
4744
4845instance Read a => Read (Unbounded a) where
4946 readsPrec prec = readParen False $ \str -> case str of
@@ -205,21 +202,21 @@ digits msg = do
205202 y <- A.anyChar
206203 if A.isDigit x && A.isDigit y
207204 then return $! (10 * digit (c2w x) + digit (c2w y))
208− else fail (msg ++ " is not 2 digits")
205+ else fail (msg <> " is not 2 digits")
209206{-# INLINE digits #-}
210207
211208dayToBuilder :: Day -> Builder
212209dayToBuilder (toGregorian -> (y,m,d)) = do
213− pad4 y ++ char8 '-' ++ pad2 m ++ char8 '-' ++ pad2 d
210+ pad4 y <> char8 '-' <> pad2 m <> char8 '-' <> pad2 d
214211
215212timeOfDayToBuilder :: TimeOfDay -> Builder
216213timeOfDayToBuilder (TimeOfDay h m s) = do
217− pad2 h ++ char8 ':' ++ pad2 m ++ char8 ':' ++ showSeconds s
214+ pad2 h <> char8 ':' <> pad2 m <> char8 ':' <> showSeconds s
218215
219216timeZoneToBuilder :: TimeZone -> Builder
220217timeZoneToBuilder tz
221− | m == 0 = sign h ++ pad2 (abs h)
222− | otherwise = sign h ++ pad2 (abs h) ++ char8 ':' ++ pad2 (abs m)
218+ | m == 0 = sign h <> pad2 (abs h)
219+ | otherwise = sign h <> pad2 (abs h) <> char8 ':' <> pad2 (abs m)
223220 where
224221 (h,m) = timeZoneMinutes tz `quotRem` 60
225222 sign h | h >= 0 = char8 '+'
@@ -227,16 +224,16 @@ timeZoneToBuilder tz
227224
228225utcTimeToBuilder :: UTCTime -> Builder
229226utcTimeToBuilder (UTCTime day time) =
230− dayToBuilder day ++ char8 ' '
231− ++ timeOfDayToBuilder (timeToTimeOfDay time) ++ byteString "+00"
227+ dayToBuilder day <> char8 ' '
228+ <> timeOfDayToBuilder (timeToTimeOfDay time) <> byteString "+00"
232229
233230zonedTimeToBuilder :: ZonedTime -> Builder
234231zonedTimeToBuilder (ZonedTime localTime tz) =
235− localTimeToBuilder localTime ++ timeZoneToBuilder tz
232+ localTimeToBuilder localTime <> timeZoneToBuilder tz
236233
237234localTimeToBuilder :: LocalTime -> Builder
238235localTimeToBuilder (LocalTime day tod) =
239− dayToBuilder day ++ char8 ' ' ++ timeOfDayToBuilder tod
236+ dayToBuilder day <> char8 ' ' <> timeOfDayToBuilder tod
240237
241238unboundedToBuilder :: (a -> Builder) -> (Unbounded a -> Builder)
242239unboundedToBuilder finiteToBuilder unbounded
@@ -259,8 +256,8 @@ dateToBuilder = unboundedToBuilder dayToBuilder
259256
260257nominalDiffTimeToBuilder :: NominalDiffTime -> Builder
261258nominalDiffTimeToBuilder xyz
262− | yz < 500000 = sign ++ integerDec x
263− | otherwise = sign ++ integerDec x ++ char8 '.' ++ showD6 y
259+ | yz < 500000 = sign <> integerDec x
260+ | otherwise = sign <> integerDec x <> char8 '.' <> showD6 y
264261 where
265262 -- A kludge to work around the fact that Data.Fixed isn't very fast and
266263 -- doesn't give me access to the MkFixed constructor.
@@ -271,8 +268,8 @@ nominalDiffTimeToBuilder xyz
271268showSeconds :: Pico -> Builder
272269showSeconds xyz
273270 | yz == 0 = pad2 x
274− | z == 0 = pad2 x ++ char8 '.' ++ showD6 y
275− | otherwise = pad2 x ++ char8 '.' ++ pad6 y ++ showD6 z
271+ | z == 0 = pad2 x <> char8 '.' <> showD6 y
272+ | otherwise = pad2 x <> char8 '.' <> pad6 y <> showD6 z
276273 where
277274 -- A kludge to work around the fact that Data.Fixed isn't very fast and
278275 -- doesn't give me access to the MkFixed constructor.
@@ -282,24 +279,24 @@ showSeconds xyz
282279
283280pad6 :: Int -> Builder
284281pad6 xy = let (x,y) = xy `quotRem` 1000
285− in pad3 x ++ pad3 y
282+ in pad3 x <> pad3 y
286283
287284showD6 :: Int -> Builder
288285showD6 xy = case xy `quotRem` 1000 of
289286 (x,0) -> showD3 x
290− (x,y) -> pad3 x ++ showD3 y
287+ (x,y) -> pad3 x <> showD3 y
291288
292289pad3 :: Int -> Builder
293290pad3 abc = let (ab,c) = abc `quotRem` 10
294291 (a,b) = ab `quotRem` 10
295− in p a ++ p b ++ p c
292+ in p a <> p b <> p c
296293
297294showD3 :: Int -> Builder
298295showD3 abc = case abc `quotRem` 100 of
299296 (a, 0) -> p a
300297 (a,bc) -> case bc `quotRem` 10 of
301− (b,0) -> p a ++ p b
302− (b,c) -> p a ++ p b ++ p c
298+ (b,0) -> p a <> p b
299+ (b,c) -> p a <> p b <> p c
303300
304301-- | p assumes its input is in the range [0..9]
305302p :: Integral n => n -> Builder
@@ -308,13 +305,13 @@ p n = char8 (w2c (fromIntegral (n + 48)))
308305
309306-- | pad2 assumes its input is in the range [0..99]
310307pad2 :: Integral n => n -> Builder
311−pad2 n = let (a,b) = n `quotRem` 10 in p a ++ p b
308+pad2 n = let (a,b) = n `quotRem` 10 in p a <> p b
312309{-# INLINE pad2 #-}
313310
314311-- | pad4 assumes its input is positive
315312pad4 :: Integer -> Builder
316313pad4 abcd | abcd >= 10000 = integerDec abcd
317− | otherwise = p a ++ p b ++ p c ++ p d
314+ | otherwise = p a <> p b <> p c <> p d
318315 where (ab,cd) = abcd `quotRem` 100
319316 (a,b) = ab `quotRem` 10
320317 (c,d) = cd `quotRem` 10