extension IOExtension on IOEither { IOEither runSideEffect({ final void Function(L l)? onLeft, final void Function(R r)? onRight, }) => chainFirst( (r) => IOEither.fromIO( IO(() => onRight?.call(r)), ), ) .swap() .chainFirst( (r) => IOEither.fromIO( IO(() => onLeft?.call(r)), ), ) .swap(); }