Builder for Data.Fixed?
- Dominant language
- Haskell
- Stars
- 301
- Forks
- 144
- Avg merge
- 7d 22h
- Merged PRs (30d)
- 1
Description
I wonder if there is a fast ByteString Builder for numbers from Data.Fixed?
I've written one myself, but don't think it's quite as fast as it could be:
```haskell
-- | Encode a 'Fixed' resolution number using ASCII digits.
fixedDec :: HasResolution a => Fixed a -> BB.Builder
fixedDec fa@(MkFixed a) | a < 0 = P.primFixed P.char8 '-' <> fixedDec (asTypeOf (MkFixed (negate a)) fa)
fixedDec fa@(MkFixed a) = integerDec i <> P.primFixed P.char8 '.' <> stimesMonoid zeros (P.primFixed P.char8 '0') <> integerDec d
where
(i, d) = a `quotRem` resolution fa
zeros :: Integer = if d == 0 then 0 else ceiling (logBase 10 (fromIntegral (resolution fa) / fromIntegral d / 10) :: Double)
```
Calculating `logBase 10` gets expensive, so it doesn't seem to perform well with lots of Fixed numbers.
Ideally if there was an efficient builder of fixed, it could be included in bytestring. Anyone have ideas of how to make it more efficient?
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.