Pipeable.ts
Pipeable.ts overview
Section titled “Pipeable.ts overview”Interface for values that support method-style pipe composition.
When to use
Use to type values that expose an Effect-style .pipe(...) method.
Details
Calling value.pipe(f, g, h) passes the value through each function from
left to right, returning the final result. Many Effect data types implement
this so operations can be chained without nesting function calls.
Example (Chaining operations with pipe)
import { Effect } from "effect"
// The Pipeable interface allows Effect values to be chained using the pipe methodconst program = Effect.succeed(1).pipe( Effect.map((x) => x + 1), Effect.flatMap((x) => Effect.succeed(x * 2)), Effect.tap((x) => Effect.log(`Result: ${x}`)))Since v2.0.0
Exports Grouped by Category
Section titled “Exports Grouped by Category”combinators
Section titled “combinators”pipeArguments
Section titled “pipeArguments”Applies a pipe method’s variadic arguments to an initial value from left
to right.
When to use
Use to implement a custom .pipe(...) method from JavaScript’s arguments
object.
Details
This helper is intended for implementing Pipeable.pipe methods that
receive JavaScript’s arguments object. With no functions it returns the
original value; otherwise it feeds each result into the next function.
Example (Implementing a pipe method)
import { Pipeable } from "effect"
class NumberBox { constructor(readonly value: number) {}
pipe(..._fns: ReadonlyArray<(value: number) => number>): number { return Pipeable.pipeArguments(this.value, arguments) as number }}
const result = new NumberBox(5).pipe( (n) => n + 2, (n) => n * 3)console.log(result) // 21Signature
declare const pipeArguments: <A>(self: A, args: IArguments) => unknownSince v2.0.0
constructors
Section titled “constructors”Provides a base constructor whose instances implement the standard Pipeable.pipe
method.
When to use
Use when you need to define a class that supports Effect-style method
chaining through .pipe(...).
Signature
declare const Class: new () => PipeableSince v3.15.0
Returns a subclass of the provided class that adds the standard pipe
method.
When to use
Use to add pipe support to an existing class without extending a base class or modifying its prototype.
Details
The original constructor and instance members are preserved, and the added
method delegates to pipeArguments.
See
Prototypefor a reusable prototype objectClassfor a base constructor to extend
Signature
declare const Mixin: <TBase extends new (...args: ReadonlyArray<any>) => any>( klass: TBase) => TBase & PipeableConstructorSince v4.0.0
models
Section titled “models”Pipeable (interface)
Section titled “Pipeable (interface)”Interface for values that support method-style pipe composition.
When to use
Use to type values that expose an Effect-style .pipe(...) method.
Details
Calling value.pipe(f, g, h) passes the value through each function from
left to right, returning the final result. Many Effect data types implement
this so operations can be chained without nesting function calls.
Example (Chaining operations with pipe)
import { Effect } from "effect"
// The Pipeable interface allows Effect values to be chained using the pipe methodconst program = Effect.succeed(1).pipe( Effect.map((x) => x + 1), Effect.flatMap((x) => Effect.succeed(x * 2)), Effect.tap((x) => Effect.log(`Result: ${x}`)))Signature
export interface Pipeable { pipe<A>(this: A): A pipe<A, B = never>(this: A, ab: (_: A) => B): B pipe<A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C pipe<A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D pipe<A, B = never, C = never, D = never, E = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E ): E pipe<A, B = never, C = never, D = never, E = never, F = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F ): F pipe<A, B = never, C = never, D = never, E = never, F = never, G = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G ): G pipe<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H ): H pipe<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I ): I pipe<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J ): J pipe<A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never>( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K ): K pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L ): L pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M ): M pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N ): N pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O ): O pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P ): P pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q ): Q pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R ): R pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S ): S pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never, T = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S, st: (_: S) => T ): T pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never, T = never, U = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S, st: (_: S) => T, tu: (_: T) => U ): U pipe< A, B = never, C = never, D = never, E = never, F = never, G = never, H = never, I = never, J = never, K = never, L = never, M = never, N = never, O = never, P = never, Q = never, R = never, S = never, T = never, U = never >( this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D, de: (_: D) => E, ef: (_: E) => F, fg: (_: F) => G, gh: (_: G) => H, hi: (_: H) => I, ij: (_: I) => J, jk: (_: J) => K, kl: (_: K) => L, lm: (_: L) => M, mn: (_: M) => N, no: (_: N) => O, op: (_: O) => P, pq: (_: P) => Q, qr: (_: Q) => R, rs: (_: R) => S, st: (_: S) => T, tu: (_: T) => U ): U}Since v2.0.0
PipeableConstructor (interface)
Section titled “PipeableConstructor (interface)”Constructor type for classes whose instances implement Pipeable.
When to use
Use as the constructor-side type when a class value should be known to create
instances that support Effect-style method chaining with .pipe(...).
See
Pipeablefor the instance-side contractClassfor the base constructorMixinfor wrapping an existing class constructor
Signature
export interface PipeableConstructor { new (...args: ReadonlyArray<any>): Pipeable}Since v3.15.0
prototypes
Section titled “prototypes”Prototype
Section titled “Prototype”Reusable prototype that implements Pipeable.pipe.
When to use
Use when classes or object prototypes can reuse this value when they need the
standard pipe implementation backed by pipeArguments.
Signature
declare const Prototype: PipeableSince v3.15.0