Добавили модуль
Filter — похож на Predicate. Но Predicate больше про нативную обертку предикатов и тайпгардов.
interface Filter<in Input, out Output = Input> {
(input: Input): Output | absent
}
const absent: unique symbol = Symbol.for("effect/Filter/absent")
Более удобный, как по мне, потомучто является по факту
filterMap — вместо Option.none() теперь Filter.absent и не нужен Option.some
declare function filterMap<A, B>(f: (value: A) => Option<B>): (arr: Array<A>) => Array<B>
declare function newFilter<A, B>(f: Filter<A, B>): (arr: Array<A>) => Array<B>
PS У меня не однозначное мнение пока, пушто такой подход не дает тотальности (работает не одинаково на области определения), но нужно поюзать.
newFilter(x => x)([1, 2])
// [1, 2]
newFilter(x => x)([Filter.absent, Filter.absent])
// []
Так что
Filter — прагматичный, Predicate — академичный и посмотрим что из этого получитсяPS возможно реально лучше назвать
FilterMapPSS кстати, вроде такая реализация лечит какое-то чудачество тайпскрипта — как вспомню отпишу