Szukaj…


Wprowadzenie

zipWithM jest zipWith jak mapM jest map : to pozwala połączyć dwie listy używając jednowartościowy funkcję.

Z modułu Control.Monad

Składnia

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

Obliczanie cen sprzedaży

Załóżmy, że chcesz sprawdzić, czy określony zestaw cen sprzedaży ma sens dla sklepu.

Przedmioty początkowo kosztują 5 USD, więc nie chcesz zaakceptować sprzedaży, jeśli cena sprzedaży jest niższa dla któregokolwiek z nich, ale chcesz wiedzieć, jaka jest nowa cena.

Obliczenie jednej ceny jest łatwe: obliczasz cenę sprzedaży i zwracasz Nothing jeśli nie uzyskasz zysku:

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

Aby obliczyć go dla całej sprzedaży, zipWithM czyni to naprawdę bardzo prostym:

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

Zwróci Nothing jeśli którakolwiek z cen sprzedaży będzie niższa niż 5 USD.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow