Hyperlinkv0.8.0-beta.28

TxHashMap

TxHashMap.everyconsteffect/TxHashMap.ts:1860
<K, V>(predicate: (value: V, key: K) => boolean): (
  self: TxHashMap<K, V>
) => Effect.Effect<boolean>
<K, V>(
  self: TxHashMap<K, V>,
  predicate: (value: V, key: K) => boolean
): Effect.Effect<boolean>

Checks whether all entries in the TxHashMap satisfy the given predicate.

Example (Checking whether every entry matches)

import { Effect, TxHashMap } from "effect"

const program = Effect.gen(function*() {
  // Create a user permissions map
  const permissions = yield* TxHashMap.make(
    ["alice", { canRead: true, canWrite: true, canDelete: false }],
    ["bob", { canRead: true, canWrite: false, canDelete: false }],
    ["charlie", { canRead: true, canWrite: true, canDelete: true }]
  )

  // Check if all users can read
  const allCanRead = yield* TxHashMap.every(
    permissions,
    (perms) => perms.canRead
  )
  console.log(allCanRead) // true

  // Check if all users can write
  const allCanWrite = yield* TxHashMap.every(
    permissions,
    (perms) => perms.canWrite
  )
  console.log(allCanWrite) // false

  // Data-last usage with pipe
  const allHaveBasicAccess = yield* permissions.pipe(
    TxHashMap.every((perms, username) => perms.canRead && username.length > 2)
  )
  console.log(allHaveBasicAccess) // true
})
combinators
export const every: {
  <K, V>(
    predicate: (value: V, key: K) => boolean
  ): (self: TxHashMap<K, V>) => Effect.Effect<boolean>
  <K, V>(
    self: TxHashMap<K, V>,
    predicate: (value: V, key: K) => boolean
  ): Effect.Effect<boolean>
} = dual(
  2,
  <K, V>(
    self: TxHashMap<K, V>,
    predicate: (value: V, key: K) => boolean
  ): Effect.Effect<boolean> => TxRef.get(self.ref).pipe(Effect.map((map) => HashMap.every(map, predicate)))
)