parseDigits l = parseDigits' l (10 ^ (length l - 1)) where parseDigits' l multiplier | null l = 0 | otherwise = multiplier * parseDigit (head l) + parseDigits' (tail l) (multiplier `div` 10) parseDigit c | c >= '0' && c <= '9' = fromEnum c - fromEnum '0' | otherwise = error "parseDigit: character is not a digit" main = do print (parseDigits "34567")