Sök…


Introduktion

zipWithM är att zipWith som mapM är att map : det låter dig kombinera två listor med en monadisk funktion.

Från modulen Control.Monad

Syntax

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

Beräkningar försäljningspriser

Anta att du vill se om en viss uppsättning försäljningspriser är meningsfull för en butik.

Varorna kostar ursprungligen $ 5, så du vill inte acceptera försäljningen om försäljningspriset är lägre för någon av dem, men du vill veta vad det nya priset annars är.

Att beräkna ett pris är enkelt: du beräknar försäljningspriset och returnerar Nothing om du inte får en vinst:

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

För att beräkna det för hela försäljningen gör zipWithM det riktigt enkelt:

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

Detta returnerar Nothing om något av försäljningspriserna är under $ 5.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow