7 | hexDigit : Bits64 -> Char
28 | asHex : Bits64 -> String
30 | asHex n = pack $
asHex' n []
32 | asHex' : Bits64 -> List Char -> List Char
34 | asHex' n hex = asHex' (assert_smaller n (n `shiftR` 4)) (hexDigit (n .&. 0xf) :: hex)
37 | leftPad : Char -> Nat -> String -> String
38 | leftPad paddingChar padToLength str =
39 | if length str < padToLength
40 | then pack (List.replicate (minus padToLength (length str)) paddingChar) ++ str
44 | fromHexDigit : Char -> Maybe Int
45 | fromHexDigit '0' = Just 0
46 | fromHexDigit '1' = Just 1
47 | fromHexDigit '2' = Just 2
48 | fromHexDigit '3' = Just 3
49 | fromHexDigit '4' = Just 4
50 | fromHexDigit '5' = Just 5
51 | fromHexDigit '6' = Just 6
52 | fromHexDigit '7' = Just 7
53 | fromHexDigit '8' = Just 8
54 | fromHexDigit '9' = Just 9
55 | fromHexDigit 'a' = Just 10
56 | fromHexDigit 'b' = Just 11
57 | fromHexDigit 'c' = Just 12
58 | fromHexDigit 'd' = Just 13
59 | fromHexDigit 'e' = Just 14
60 | fromHexDigit 'f' = Just 15
61 | fromHexDigit _ = Nothing
64 | fromHexChars : List Char -> Maybe Integer
65 | fromHexChars = fromHexChars' 1
67 | fromHexChars' : Integer -> List Char -> Maybe Integer
68 | fromHexChars' _ [] = Just 0
69 | fromHexChars' m (d :: ds)
70 | = do digit <- fromHexDigit (toLower d)
71 | digits <- fromHexChars' (m*16) ds
72 | pure $
cast digit * m + digits
75 | fromHex : String -> Maybe Integer
76 | fromHex = fromHexChars . unpack