Filter githubВ итоге
Filter прадставляет собой вот такую функцию:
export interface Filter {
(input: Input): Result<Pass, Fail>
}
По-сути это
filterMap: остается то что в succeed() плюс можно сразу мапнуть результат
Array.filter(
[1,2,3],
x => isOdd(x)
? succeed(x.toString())
: fail(x)
) // ["1", "3"]
Но дополнительный трюк в том, что были добавлены перегрузки которые одновременно принимают и обычный предикат — то есть одновременно работает и обычная фильтрация без изменения типа.
Array.filter(isOdd) // [1, 2]
Сначала я подумал, что есть какой-то unsound случай, но нет все чистенько-ладно)
Таким образом удалось избавиться от семейства функций
filterMap во всей экосистеме, объединив две функции в одну.