flatten
в Scala, похоже, работает с любой монадой.И этот тип полиморфизма, называемый специальным полиморфизмом, к сожалению, не поддерживается в OCaml (хотя он включен в план, как функция, называемая «модульные имплициты»).Поэтому мы должны написать код, специфичный для list
с option
с.Используя всего лишь Belt
, мы можем сделать это:
[Some("test"), None, None, Some("foo"), Some("bar"), None]
|> Belt.List.keepMap(_, x => x)
keepMap
- это то, что в стандартных библиотеках называется filterMap
, и принимает функцию, которая должна возвращать option
вместо bool
, где None
будет отфильтрован, а Some(x)
будет сплющен и включен в окончательный список как просто x
.