Игнорирование throwingValidator
и бросок в целом (какой вид поражения цель использования fp-ts
в первую очередь) и фокусировка только на этом конкретном запросе:
Refactor, чтобы избавиться отпромежуточные переменные, объединяющие результаты validateMonth и validateYear в тип Either
Вы, вероятно, ищете:
const monthAndYearResult: Either<
Error,
{ month: Month, year: Year }
> = sequenceS(either)({
month: validateMonth(month),
year: validateYear(year)
})
для "последовательности" в общем случае требуется экземпляр Traversable
(структура { year, month }
в этом случае) и экземпляр Applicative
(either
в этом случае), а семантика - это совокупность различных независимых вычислений вместе.
Если вы явно хотитечтобы игнорировать результат, обычно для этого предоставляется альтернатива _
с суффиксом, но на данный момент это не так в fp-ts
v2.
Чтобы получить Either<Error, void>
, вы можете прибегнуть к:
const result = pipe(
sequenceS(E.either)({ month: validateMonth(month), year: validateYear(year) }),
E.map(constVoid)
)
Обратите внимание, что sequenceS
является лишь одним из возможных вариантов, вы можете использовать sequenceT
или array.sequence
для получения похожих результатов, например:
pipe(
sequenceT(either)([validateMonth(month), validateYear(year)]),
E.map(constVoid)
)