const fetchFoo: () => Effect<R1,E1, Option.Option<Foo>>
const fetchBar: (foo: Foo) => Effect<R2, E2, Option.Option<Bar>>
const program = pipe(
fetchFoo()
Effect.flatMap(
Option.match({
onNone: () => Effect.succeed(Option.none<Bar>()),
onSome: foo => fetchBar(foo)
})
)
) // returns Effect<R1|R2, E2|E2, Option.Option<Bar>>
const fetchFoo: () => Effect<R1,E1, Option.Option<Foo>>
const fetchBar: (foo: Foo) => Effect<R2, E2, Option.Option<Bar>>
const program = pipe(
fetchFoo()
Effect.flatMap(
Option.match({
onNone: () => Effect.succeed(Option.none<Bar>()),
onSome: foo => fetchBar(foo)
})
)
) // returns Effect<R1|R2, E2|E2, Option.Option<Bar>>