Buscar..


Introducción

zipWithM es para zipWith como mapM es para map : te permite combinar dos listas usando una función monádica.

Desde el módulo Control.Monad

Sintaxis

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

Cálculos de precios de venta.

Supongamos que desea ver si un determinado conjunto de precios de venta tiene sentido para una tienda.

Los artículos originalmente cuestan $ 5, por lo que no desea aceptar la venta si el precio de venta es menor para cualquiera de ellos, pero sí quiere saber cuál es el precio nuevo.

Calcular un precio es fácil: usted calcula el precio de venta y no devuelve Nothing si no obtiene una ganancia:

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

Para calcularlo para toda la venta, zipWithM hace realmente simple:

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

Esto devolverá Nothing si alguno de los precios de venta está por debajo de $ 5.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow