<A>(self: TxChunk<A>): Effect.Effect<boolean>Checks whether the TxChunk is non-empty.
Example (Checking for a non-empty chunk)
import { Effect, TxChunk } from "effect"
const program = Effect.gen(function*() {
const emptyChunk = yield* TxChunk.empty<number>()
const nonEmptyChunk = yield* TxChunk.fromIterable([1, 2, 3])
// Check if chunks are non-empty - automatically transactional
const isNonEmpty1 = yield* TxChunk.isNonEmpty(emptyChunk)
const isNonEmpty2 = yield* TxChunk.isNonEmpty(nonEmptyChunk)
console.log(isNonEmpty1) // false
console.log(isNonEmpty2) // true
})combinators
Source effect/TxChunk.ts:5232 lines
export const const isNonEmpty: <A>(
self: TxChunk<A>
) => Effect.Effect<boolean>
Checks whether the TxChunk is non-empty.
Example (Checking for a non-empty chunk)
import { Effect, TxChunk } from "effect"
const program = Effect.gen(function*() {
const emptyChunk = yield* TxChunk.empty<number>()
const nonEmptyChunk = yield* TxChunk.fromIterable([1, 2, 3])
// Check if chunks are non-empty - automatically transactional
const isNonEmpty1 = yield* TxChunk.isNonEmpty(emptyChunk)
const isNonEmpty2 = yield* TxChunk.isNonEmpty(nonEmptyChunk)
console.log(isNonEmpty1) // false
console.log(isNonEmpty2) // true
})
isNonEmpty = <function (type parameter) A in <A>(self: TxChunk<A>): Effect.Effect<boolean>A>(self: TxChunk<A>(parameter) self: {
ref: TxRef.TxRef<Chunk.Chunk<A>>;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self: interface TxChunk<in out A>TxChunk is a transactional chunk data structure that provides Software Transactional Memory (STM)
semantics for chunk operations.
Details
Accessed values are tracked by the transaction in order to detect conflicts and to track changes.
A transaction will retry whenever a conflict is detected or whenever the transaction explicitly
calls Effect.txRetry and any of the accessed TxChunk values change.
Example (Using a transactional chunk)
import { Chunk, Effect, TxChunk } from "effect"
const program = Effect.gen(function*() {
// Create a transactional chunk
const txChunk: TxChunk.TxChunk<number> = yield* TxChunk.fromIterable([
1,
2,
3
])
// Single operations - no explicit transaction needed
yield* TxChunk.append(txChunk, 4)
const result = yield* TxChunk.get(txChunk)
console.log(Chunk.toReadonlyArray(result)) // [1, 2, 3, 4]
// Multi-step atomic operation - use explicit transaction
yield* Effect.tx(
Effect.gen(function*() {
yield* TxChunk.prepend(txChunk, 0)
yield* TxChunk.append(txChunk, 5)
})
)
const finalResult = yield* TxChunk.get(txChunk)
console.log(Chunk.toReadonlyArray(finalResult)) // [0, 1, 2, 3, 4, 5]
})
TxChunk<function (type parameter) A in <A>(self: TxChunk<A>): Effect.Effect<boolean>A>): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<boolean> =>
const modify: {
<A, R>(
f: (
current: Chunk.Chunk<NoInfer<A>>
) => [
returnValue: R,
newValue: Chunk.Chunk<A>
]
): (self: TxChunk<A>) => Effect.Effect<R>
<A, R>(
self: TxChunk<A>,
f: (
current: Chunk.Chunk<A>
) => [
returnValue: R,
newValue: Chunk.Chunk<A>
]
): Effect.Effect<R>
}
modify(self: TxChunk<A>(parameter) self: {
ref: TxRef.TxRef<Chunk.Chunk<A>>;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
self, (current: Chunk.Chunk<A>(parameter) current: {
length: number;
right: Chunk<A>;
left: Chunk<A>;
backing: Backing<A>;
depth: number;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
current) => [import ChunkChunk.isNonEmpty(current: Chunk.Chunk<A>(parameter) current: {
length: number;
right: Chunk<A>;
left: Chunk<A>;
backing: Backing<A>;
depth: number;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
current), current: Chunk.Chunk<A>(parameter) current: {
length: number;
right: Chunk<A>;
left: Chunk<A>;
backing: Backing<A>;
depth: number;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
current])