export const filterOrElse: {
<A, B extends A, X extends A, R2, E2, C>(
filter: Refinement<A, B>,
orElse: (a: X) => Effect<R2, E2, C>
): <R, E>(self: Effect<R, E, A>) => Effect<R2 | R, E2 | E, B | C>
<A, X extends A, Y extends A, R2, E2, B>(
filter: Predicate<X>,
orElse: (a: Y) => Effect<R2, E2, B>
): <R, E>(self: Effect<R, E, A>) => Effect<R2 | R, E2 | E, A | B>
}
export const filterOrElse: {
<A, B extends A, X extends A, R2, E2, C>(
filter: Refinement<A, B>,
orElse: (a: X) => Effect<R2, E2, C>
): <R, E>(self: Effect<R, E, A>) => Effect<R2 | R, E2 | E, B | C>
<A, X extends A, Y extends A, R2, E2, B>(
filter: Predicate<X>,
orElse: (a: Y) => Effect<R2, E2, B>
): <R, E>(self: Effect<R, E, A>) => Effect<R2 | R, E2 | E, A | B>
}