packages feed

heyefi-2.0.0.0: src/HEyefi/Hex.hs

module HEyefi.Hex where

import HEyefi.Prelude

unhex :: Text -> Maybe Text
unhex = unpack >>> go >>> fmap pack
  where
    go [] = Just []
    go (a:b:xs) = do
      first <- c a
      second <- c b
      rest <- go xs
      return (toEnum ((first * 16) + second) : rest)
    go _ = Nothing

c :: Char -> Maybe Int
c '0' = Just 0
c '1' = Just 1
c '2' = Just 2
c '3' = Just 3
c '4' = Just 4
c '5' = Just 5
c '6' = Just 6
c '7' = Just 7
c '8' = Just 8
c '9' = Just 9
c 'a' = Just 10
c 'b' = Just 11
c 'c' = Just 12
c 'd' = Just 13
c 'e' = Just 14
c 'f' = Just 15
c 'A' = Just 10
c 'B' = Just 11
c 'C' = Just 12
c 'D' = Just 13
c 'E' = Just 14
c 'F' = Just 15
c _   = Nothing