diff --git a/docsite/source/list.html.md b/docsite/source/list.html.md index 248c5e7..59a9045 100644 --- a/docsite/source/list.html.md +++ b/docsite/source/list.html.md @@ -19,6 +19,42 @@ M::List[1, 2].bind(-> x { [x, x + 1] }) # => List[1, 2, 2, 3] M::List[1, nil].bind { |x| [x + 1] } # => error ``` +### `collect` + +Works differently than `Enumerable#collect`: the block must return `Maybe` types, `Some` values are retained and `None` is discarded. As in other monads if no block given the first argument will be treated as callable and used instead. + +```ruby +require 'dry/monads/list' + +M = Dry::Monads + +n = 20 +M::List[10, 5, 0].collect do |divisor| + if divisor.zero? + M::None() + else + M::Some(n / divisor) + end +end +# => List[2, 4] + +M::List[M::Some(1), M::None(), M::Some(2), M::None(), M::Some(3)].collect # => List[1, 2, 3] + +leap_year = proc do |year| + if year % 400 == 0 + M::Some(year) + elsif year % 100 == 0 + M::None() + elsif year % 4 == 0 + M::Some(year) + else + M::None() + end +end + +M::List[2020, 2021, 2022, 2023, 2024].collect(leap_year) # => List[2020, 2024] +``` + ### `fmap` Maps a block over the list. Acts as `Array#map`. As in other monads, if no block given the first argument will be treated as callable and used instead.