Commits

Bryan O'Sullivan committed ffc9cc0

Reduce duplication

Comments (0)

Files changed (2)

Data/Text/Lazy/Builder/Int.hs

 {-# RULES "decimal/Word32" decimal = positive :: Word32 -> Builder #-}
 {-# RULES "decimal/Word64" decimal = positive :: Word64 -> Builder #-}
 {-# RULES "decimal/Integer" decimal = integer 10 :: Integer -> Builder #-}
-decimal i
-  | i < 0     = singleton '-' <>
-                if i <= -128
-                then positive (-(i `quot` 10)) <> digit (-(i `rem` 10))
-                else positive (-i)
-  | otherwise = positive i
+decimal i = decimal' (<= -128) i
 
 boundedDecimal :: (Integral a, Bounded a) => a -> Builder
 {-# SPECIALIZE boundedDecimal :: Int -> Builder #-}
 {-# SPECIALIZE boundedDecimal :: Int16 -> Builder #-}
 {-# SPECIALIZE boundedDecimal :: Int32 -> Builder #-}
 {-# SPECIALIZE boundedDecimal :: Int64 -> Builder #-}
-boundedDecimal i
-    | i < 0     = singleton '-' <>
-                  if i == minBound
-                  then positive (-(i `quot` 10)) <> digit (-(i `rem` 10))
-                  else positive (-i)
+boundedDecimal i = decimal' (== minBound) i
+
+decimal' :: (Integral a) => (a -> Bool) -> a -> Builder
+{-# INLINE decimal' #-}
+decimal' p i
+    | i < 0 = singleton '-' <>
+              if p i
+              then positive (-(i `quot` 10)) <> digit (-(i `rem` 10))
+              else positive (-i)
     | otherwise = positive i
 
 positive :: (Integral a) => a -> Builder

Data/Text/Lazy/Builder/Internal.hs

 -----------------------------------------------------------------------------
 
 module Data.Text.Lazy.Builder.Internal
-   ( -- * The Builder type
+   ( -- * Public API
+     -- ** The Builder type
      Builder
    , toLazyText
    , toLazyTextWith
 
-     -- * Constructing Builders
+     -- ** Constructing Builders
    , singleton
    , fromText
    , fromLazyText
    , fromString
 
-     -- * Flushing the buffer state
+     -- ** Flushing the buffer state
    , flush
+
+     -- * Internal functions
+   , writeN
    ) where
 
 import Control.Monad.ST (ST, runST)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.