NZ2SHCLDVMHP4MN4ZIVSABSBXKVC6WYMTR7YPVA5AH6VUREXH37AC
readInput :: String -> (String -> Either String b) -> InputT IO (Either String b)
calculateBudget :: Int -> Either AppError (Budget "USD" '(50, 30, 20))
calculateBudget x = do
income <- mkIncome x
let rule = defaultRule
budget = calculate rule income
return budget
readInput :: String -> (String -> Either String b) -> InputT IO (Either AppError b)