Suche…


Einführung

zipWithM ist zipWith wie mapM map : Sie können zwei Listen mit einer monadischen Funktion kombinieren.

Aus dem Modul Control.Monad

Syntax

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

Berechnungspreise

Angenommen, Sie möchten sehen, ob eine bestimmte Menge von Verkaufspreisen für ein Geschäft sinnvoll ist.

Die Artikel kosten ursprünglich $ 5, sodass Sie den Verkauf nicht akzeptieren möchten, wenn der Verkaufspreis niedriger ist, Sie jedoch wissen möchten, was der neue Preis sonst ist.

Die Berechnung eines Preises ist einfach: Sie berechnen den Verkaufspreis und geben Nothing wenn Sie keinen Gewinn erzielen:

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

Um es für den gesamten Verkauf zu berechnen, macht zipWithM es wirklich einfach:

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

Dies gibt Nothing wenn einer der Verkaufspreise unter 5 US-Dollar liegt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow