diff :: Char -> (Char, Int)
diff ch | ch >= 'a' = ('a', 10)
        | ch >= 'A' = ('A', 10)
        | ch >= '0' = ('0',  0)
        | otherwise = error $ "Unexpected char [" ++ (show ch) ++ "] in unhexNibble"
diff :: Char -> (Char, Int)
diff ch | ch >= 'a' = ('a', 10)
        | ch >= 'A' = ('A', 10)
        | ch >= '0' = ('0',  0)
        | otherwise = error $ "Unexpected char [" ++ (show ch) ++ "] in unhexNibble"
diff ch | ch >= 'a' = ('a', 10)
        | ch >= 'A' = ('A', 10)
        | ch >= '0' = ('0',  0)
        | otherwise = error $ "Unexpected char [" ++ (show ch) ++ "] in unhexNibble"