Format more numbers
This commit is contained in:
parent
75304e8027
commit
23bd495521
3 changed files with 53 additions and 11 deletions
|
|
@ -1,19 +1,54 @@
|
|||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Mima.Format.Common
|
||||
( toHex
|
||||
, fixedWidthHex
|
||||
, fixedWidthHexAddress
|
||||
( toBin
|
||||
, toDec
|
||||
, toHex
|
||||
, chunkedBy
|
||||
, chunkyBin
|
||||
, chunkyDec
|
||||
, chunkyHex
|
||||
, fixWidthBin
|
||||
, fixWidthDec
|
||||
, fixWidthHex
|
||||
) where
|
||||
|
||||
import qualified Data.Text as T
|
||||
import Numeric
|
||||
|
||||
import Mima.Word
|
||||
toBin :: (Integral a, Show a) => a -> T.Text
|
||||
toBin a
|
||||
| a < 0 = "-" <> toBin (- a)
|
||||
toBin 0 = "0"
|
||||
toBin a = T.reverse $ T.pack $ toBin' a
|
||||
where
|
||||
toBin' :: (Integral a, Show a) => a -> String
|
||||
toBin' 0 = []
|
||||
toBin' n = (if n `mod` 2 == 0 then '0' else '1') : toBin' (n `div` 2)
|
||||
|
||||
toDec :: (Integral a, Show a ) => a -> T.Text
|
||||
toDec = T.pack . show
|
||||
|
||||
toHex :: (Integral a, Show a) => a -> T.Text
|
||||
toHex a = T.pack $ showHex a ""
|
||||
|
||||
fixedWidthHex :: (Integral a, Show a) => Int -> a -> T.Text
|
||||
fixedWidthHex n = T.justifyRight n '0' . toHex
|
||||
chunkedBy :: T.Text -> Int -> T.Text -> T.Text
|
||||
chunkedBy sep n = T.intercalate sep . T.chunksOf n
|
||||
|
||||
fixedWidthHexAddress :: MimaAddress -> T.Text
|
||||
fixedWidthHexAddress = fixedWidthHex 5
|
||||
chunkyBin :: T.Text -> T.Text
|
||||
chunkyBin = chunkedBy " " 4
|
||||
|
||||
chunkyDec :: T.Text -> T.Text
|
||||
chunkyDec = chunkedBy "'" 3
|
||||
|
||||
chunkyHex :: T.Text -> T.Text
|
||||
chunkyHex = chunkedBy " " 2
|
||||
|
||||
fixWidthBin :: Int -> T.Text -> T.Text
|
||||
fixWidthBin n = T.justifyRight n '0'
|
||||
|
||||
fixWidthDec :: Int -> T.Text -> T.Text
|
||||
fixWidthDec n = T.justifyRight n ' '
|
||||
|
||||
fixWidthHex :: Int -> T.Text -> T.Text
|
||||
fixWidthHex n = T.justifyRight n '0'
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue