Hyperlinkv0.8.0-beta.28

Pipeable

Pipeable.pipeArgumentsconsteffect/Pipeable.ts:563
<A>(self: A, args: IArguments): unknown

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) // 21
combinators
Source effect/Pipeable.ts:56331 lines
export const pipeArguments = <A>(self: A, args: IArguments): unknown => {
  switch (args.length) {
    case 0:
      return self
    case 1:
      return args[0](self)
    case 2:
      return args[1](args[0](self))
    case 3:
      return args[2](args[1](args[0](self)))
    case 4:
      return args[3](args[2](args[1](args[0](self))))
    case 5:
      return args[4](args[3](args[2](args[1](args[0](self)))))
    case 6:
      return args[5](args[4](args[3](args[2](args[1](args[0](self))))))
    case 7:
      return args[6](args[5](args[4](args[3](args[2](args[1](args[0](self)))))))
    case 8:
      return args[7](args[6](args[5](args[4](args[3](args[2](args[1](args[0](self))))))))
    case 9:
      return args[8](args[7](args[6](args[5](args[4](args[3](args[2](args[1](args[0](self)))))))))
    default: {
      let ret = self
      for (let i = 0, len = args.length; i < len; i++) {
        ret = args[i](ret)
      }
      return ret
    }
  }
}
Referenced by 7 symbols