Recherche…


Introduction

zipWithM est zipWith comme mapM est à la map : il vous permet de combiner deux listes en utilisant une fonction monadique.

A partir du module Control.Monad

Syntaxe

  • zipWithM :: Applicatif m => (a -> b -> mc) -> [a] -> [b] -> m [c]

Calcul des prix de vente

Supposons que vous vouliez voir si un certain ensemble de prix de vente est approprié pour un magasin.

À l'origine, les articles coûtaient 5 dollars, vous ne voulez donc pas accepter la vente si le prix de vente est inférieur pour l'un d'entre eux, mais vous voulez savoir quel est le nouveau prix.

Calculer un prix est facile: vous calculez le prix de vente et vous retournez Nothing si vous ne faites pas de profit:

calculateOne :: Double -> Double -> Maybe Double
calculateOne price percent = let newPrice = price*(percent/100)
                             in if newPrice < 5 then Nothing else Just newPrice

Pour le calculer pour toute la vente, zipWithM rend très simple:

calculateAllPrices :: [Double] -> [Double] -> Maybe [Double]
calculateAllPrices prices percents = zipWithM calculateOne prices percents

Cela ne rapportera Nothing si l'un des prix de vente est inférieur à 5 $.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow