Skip to content

Instantly share code, notes, and snippets.

@deque-blog
Created August 14, 2017 16:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deque-blog/fed5c7def19a4c75908d37377a8b8e31 to your computer and use it in GitHub Desktop.
Save deque-blog/fed5c7def19a4c75908d37377a8b8e31 to your computer and use it in GitHub Desktop.
evalMoneyIn :: (Conversion -> Maybe Rate) -> MoneyExpr -> Currency -> Maybe Money
evalMoneyIn findRate expr refCurrency = visit expr
where
visit (KnownAmount (Money amt curr)) = do
rate <- findRate (curr, refCurrency)
pure $ Money (rate * amt) refCurrency
visit (MoneyAdd subs) = do
ms <- mapM visit subs
pure $ Money (sum (map amount ms)) refCurrency
visit (MoneyMul expr factor) = do
m <- visit expr
pure $ Money (factor * amount m) refCurrency
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment