Differences Between `Effect.gen` and `Effect.fn` Usage in Functions

What's the benefit/difference of returning
Effect.gen
from a plain function over using Effect.fn?

const divideGen = (a: number, b: number) =>
  Effect.gen(function* () {
    if (b === 0) return yield* Effect.fail("Cannot divide by zero")
    return a / b
  })

const divideFn = Effect.fn(function* (a: number, b: number) {
  if (b === 0) return yield* Effect.fail("Cannot divide by zero")
  return a / b
})


I know that you can define spans with Effect.fn("span")(body) (just as you can with Effect.gen(body).pipe(Effect.withSpan("span")) ...but was wondering if there were any other key benefits/differences?
Was this page helpful?