Commits

Bryan O'Sullivan committed 3f0fd9d

Add a countDigits function

Comments (0)

Files changed (1)

Data/Text/Lazy/Builder/Int.hs

   where go n | n < 10    = digit n
              | otherwise = go (n `quot` 10) <> digit (n `rem` 10)
 
+countDigits :: (Integral a) => a -> Int
+{-# INLINE countDigits #-}
+countDigits = go 1
+  where go !k v
+           | v < 10 = k
+           | v < 100 = k + 1
+           | v < 1000 = k + 2
+           | v < 10000 = k + 3
+           | otherwise = go (k+4) (v `quot` 10000)
+
 hexadecimal :: Integral a => a -> Builder
 {-# SPECIALIZE hexadecimal :: Int -> Builder #-}
 {-# SPECIALIZE hexadecimal :: Int8 -> Builder #-}
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.