計算銷售價格

假設你想要檢視某組銷售價格是否對商店有意義。

這些物品原本花費 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