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")