on master help sign in
Add a countDigits function
2d089a6Bryan O'Sullivan
Data/Text/Lazy/Builder/Int.hs+10
@@ -89,6 +89,16 @@ positive = go
89 where go n | n < 10 = digit n
89 where go n | n < 10 = digit n
90 | otherwise = go (n `quot` 10) <> digit (n `rem` 10)
90 | otherwise = go (n `quot` 10) <> digit (n `rem` 10)
91
91
92+countDigits :: (Integral a) => a -> Int
93+{-# INLINE countDigits #-}
94+countDigits = go 1
95+ where go !k v
96+ | v < 10 = k
97+ | v < 100 = k + 1
98+ | v < 1000 = k + 2
99+ | v < 10000 = k + 3
100+ | otherwise = go (k+4) (v `quot` 10000)
101+
92hexadecimal :: Integral a => a -> Builder
102hexadecimal :: Integral a => a -> Builder
93{-# SPECIALIZE hexadecimal :: Int -> Builder #-}
103{-# SPECIALIZE hexadecimal :: Int -> Builder #-}
94{-# SPECIALIZE hexadecimal :: Int8 -> Builder #-}
104{-# SPECIALIZE hexadecimal :: Int8 -> Builder #-}