Effect<E, L, R>.gen constructor

Effect<E, L, R>.gen(
  1. DoFunctionEffect<E, L, R> f
)

{@category constructors}

Implementation

factory Effect.gen(DoFunctionEffect<E, L, R> f) => Effect<E, L, R>._(
      (env) {
        try {
          return f(_effectGen<E, L>(env)).then(
            Right.new,
            onError: (error, stackTrace) {
              if (error is _EffectThrow<L>) {
                return Left<Cause<L>, R>(error.cause);
              }

              return Left<Cause<L>, R>(Die(error, stackTrace));
            },
          );
        } on _EffectThrow<L> catch (genError) {
          return Left(genError.cause);
        }
      },
    );