import Data.Char
import Data.Functor
import Control.Applicative
import Data.List
toDig :: Char -> Maybe Int
toDig c =
elemIndex c "0123456789abcdef"
toNumList :: [Char] -> [Maybe Int]
toNumList = map (toDig . toLower)
toNumRec :: [Maybe Int] -> Int -> Maybe Int -> Maybe Int
toNumRec [] i acc = acc
toNumRec (f:rest) i acc =
let acc' = liftA2 (\acc f -> ((16^i)*f) + acc) acc f
in toNumRec rest (i+1) acc'
toDec str = toNumRec (reverse (toNumList str)) 0 (Just 0)
main = do
let res = toDec "aa"
print res