// ets_tracing: off import type { EitherURI } from "../Modules/index.js" import type { URI } from "../Prelude/index.js" import * as P from "../Prelude/index.js" import type { V } from "./definition.js" import * as E from "./operations/index.js" export const Any = P.instance], V>>({ any: () => E.right({}) }) export const AssociativeBoth = P.instance], V>>({ both: E.zip }) export const AssociativeEither = P.instance], V>>({ orElseEither: (fb) => (fa) => fa._tag === "Right" ? E.right(E.left(fa.right)) : E.map_(fb(), E.right) }) export const AssociativeFlatten = P.instance], V>>( { flatten: E.flatten } ) export const Covariant = P.instance], V>>({ map: E.map }) export const Applicative = P.instance], V>>({ ...Any, ...Covariant, ...AssociativeBoth }) export const Monad = P.instance], V>>({ ...Any, ...Covariant, ...AssociativeFlatten }) export const Fail = P.instance], V>>({ fail: E.left }) export const Run = P.instance], V>>({ either: E.right }) export const ForEach = P.instance], V>>({ map: E.map, forEachF: E.forEachF }) export const FoldMap = P.instance], V>>({ foldMap: E.foldMap }) export const Reduce = P.instance], V>>({ reduce: E.reduce }) export const ReduceRight = P.instance], V>>({ reduceRight: E.reduceRight }) export const Foldable = P.instance], V>>({ ...FoldMap, ...Reduce, ...ReduceRight }) export const ChainRec = P.instance]>>({ chainRec: (f: (a: A) => E.Either>) => (a: A): E.Either => P.tailRec>, E.Either>(f(a), (e) => E.isLeft(e) ? E.right(E.left(e.left)) : E.isLeft(e.right) ? E.left(f(e.right.left)) : E.right(E.right(e.right.right)) ) }) export const { chainRec } = ChainRec