サーチ…


前書き

zipWithMにあるzipWithとしてmapMすることですmap :それはあなたがモナドの関数を使用して2つのリストを結合することができます。

Control.Monadモジュールから

構文

  • zipWithM :: Applicative m =>(a→b→mc)→[a]→[b]→m [c]

販売価格の計算

特定のセットの販売価格が店舗に適しているかどうかを確認したいとします。

商品の価格は元来5ドルですので、販売価格がそれよりも低い場合はその販売を受け入れることは望ましくありませんが、そうでない場合は新しい価格が何であるかを知りたいと考えています。

1つの価格を計算するのは簡単です:販売価格を計算し、利益を得られNothing場合は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を返します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow