计算销售价格
假设你想要查看某组销售价格是否对商店有意义。
这些物品原本花费 5 美元,所以如果销售价格低于其中任何一个,你不想接受销售,但你确实想知道新价格是多少。
计算一个价格很简单:你计算销售价格,如果你没有获利,则返回 Nothing
:
calculateOne::Double -> Double -> Maybe Double
calculateOne price percent = let newPrice = price*(percent/100)
in if newPrice < 5 then Nothing else Just newPrice
为了计算整个销售,zipWithM
让它非常简单:
calculateAllPrices :: [Double] -> [Double] -> Maybe [Double]
calculateAllPrices prices percents = zipWithM calculateOne prices percents
如果任何销售价格低于 5 美元,这将返回 Nothing
。