Skip to main content Link Search Menu Expand Document (external link)

Chunk overview

Extension to the effect/Chunk module providing length and duplicate predicates, indexed search, and slicing operations.

Mental model

  • Chunk.Chunk<A> is an immutable, persistent sequence of elements of type A.
  • All functions return new chunks; chunks are never mutated.
  • Functions are curried, data-last — call as pipe(chunk, MChunk.fn(arg)).

Common tasks

  • Query: {@link hasLength}, {@link hasDuplicates}
  • Search: {@link findAll}
  • Slice: {@link takeBut}, {@link takeRightBut}

Quickstart

Example (Indexed search and duplicate check)

import { Chunk, pipe } from "effect"
import * as MChunk from "@parischap/effect-lib/MChunk"
import * as MPredicate from "@parischap/effect-lib/MPredicate"

const chunk = Chunk.make(1, 2, 3, 2, 4)
console.log(MChunk.hasDuplicates(chunk)) // true
console.log(pipe(chunk, MChunk.findAll(MPredicate.strictEquals(2)))) // Chunk(1, 3)

Table of contents


Models

Type (interface)

Type on which this module’s functions operate.

Signature

export interface Type<out A> extends Chunk.Chunk<A> {}

Predicates

hasDuplicates

Returns true if self contains at least one duplicate, using Equal.equals for comparison.

  • Use to validate uniqueness constraints.
  • Comparison uses effect/Equal.equals (structural equality for Equal-aware types, otherwise ===).
  • Returns false for empty chunks.

Example (Detecting duplicates)

import { Chunk } from "effect"
import * as MChunk from "@parischap/effect-lib/MChunk"

console.log(MChunk.hasDuplicates(Chunk.make(1, 2, 3))) // false
console.log(MChunk.hasDuplicates(Chunk.make(1, 2, 2, 3))) // true

Signature

export declare const hasDuplicates: <A>(self: Type<A>) => boolean

hasLength

Returns true if the length of self is exactly l.

  • Use to assert that a chunk has a specific number of elements.
  • Length comparison is ===.

Example (Length check)

import { Chunk, pipe } from "effect"
import * as MChunk from "@parischap/effect-lib/MChunk"

const chunk = Chunk.make(1, 2, 3)
console.log(pipe(chunk, MChunk.hasLength(3))) // true
console.log(pipe(chunk, MChunk.hasLength(2))) // false

Signature

export declare const hasLength: (l: number) => <A>(self: Type<A>) => boolean

Utils

findAll

Returns a Chunk of the indexes of all elements of self satisfying predicate.

  • Use to locate every position matching a condition.
  • Indexes are returned in ascending order.
  • Returns an empty chunk when no element matches.

Example (Indexes of matching elements)

import { Chunk, pipe } from "effect"
import * as MChunk from "@parischap/effect-lib/MChunk"
import * as MPredicate from "@parischap/effect-lib/MPredicate"

const chunk = Chunk.make(1, 2, 3, 2, 4)
console.log(pipe(chunk, MChunk.findAll(MPredicate.strictEquals(2)))) // Chunk(1, 3)

Signature

export declare const findAll: <B extends A, A = B>(
  predicate: Predicate.Predicate<A>
) => (self: Type<B>) => Chunk.Chunk<number>

takeBut

Returns a chunk containing all elements of self except the last n.

  • Use to drop a suffix of fixed size.
  • When n >= self.length, returns an empty chunk.
  • When n <= 0, returns self unchanged.

Example (Drop trailing elements)

import { Chunk, pipe } from "effect"
import * as MChunk from "@parischap/effect-lib/MChunk"

const chunk = Chunk.make(1, 2, 3, 4, 5)
console.log(pipe(chunk, MChunk.takeBut(2))) // Chunk(1, 2, 3)

Signature

export declare const takeBut: (n: number) => <A>(self: Type<A>) => Chunk.Chunk<A>

takeRightBut

Returns a chunk containing all elements of self except the first n.

  • Use to drop a prefix of fixed size.
  • When n >= self.length, returns an empty chunk.
  • When n <= 0, returns self unchanged.

Example (Drop leading elements)

import { Chunk, pipe } from "effect"
import * as MChunk from "@parischap/effect-lib/MChunk"

const chunk = Chunk.make(1, 2, 3, 4, 5)
console.log(pipe(chunk, MChunk.takeRightBut(2))) // Chunk(3, 4, 5)

Signature

export declare const takeRightBut: (n: number) => <A>(self: Type<A>) => Chunk.Chunk<A>