HashMap
Stores key/value entries in an immutable hash map.
A HashMap<Key, Value> hashes keys and resolves matches with Effect's
structural equality rules. Lookup, insertion, removal, and transformation
operations return new maps, while temporary mutation helpers support efficient
batch updates. This module also includes constructors, iteration, conversion,
mapping, filtering, and reducing helpers.
Combining
Combines two HashMaps into one.
Details
Entries from that are inserted into self; when both maps contain an
equal key, the value from that replaces the value from self.
Signature
declare const union: { <K1, V1>(that: HashMap<K1, V1>): <K0, V0>(self: HashMap<K0, V0>) => HashMap<K1 | K0, V1 | V0>; <K0, V0, K1, V1>(self: HashMap<K0, V0>, that: HashMap<K1, V1>): HashMap<K0 | K1, V0 | V1>;}Example
(Combining HashMaps)
import { HashMap, Option } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2])const map2 = HashMap.make(["b", 20], ["c", 3])const union = HashMap.union(map1, map2)
union // => HashMap.make(["a", 1], ["b", 20], ["c", 3])HashMap.get(union, "b") // => Option.some(20)Constructors
Creates a new empty HashMap.
Signature
declare const empty: <K = never, V = never>() => HashMap<K, V>Example
(Creating an empty HashMap)
import { HashMap } from "effect"
HashMap.empty<string, number>() // => HashMap.empty()fromIterable
Creates a new HashMap from an iterable collection of key/value pairs.
Signature
declare const fromIterable: <K, V>(entries: Iterable<readonly [K, V]>) => HashMap<K, V>Example
(Creating a HashMap from an iterable)
import { HashMap } from "effect"
const entries = [["a", 1], ["b", 2], ["c", 3]] as constHashMap.fromIterable(entries) // => HashMap.make(["a", 1], ["b", 2], ["c", 3])Constructs a new HashMap from an array of key/value pairs.
Signature
declare const make: <Entries extends ReadonlyArray<readonly [any, any]>>(...entries: Entries) => HashMap<Entries[number] extends readonly [infer K, any] ? K : never, Entries[number] extends readonly [any, infer V] ? V : never>Example
(Creating a HashMap from entries)
import { HashMap } from "effect"
HashMap.make(["a", 1], ["b", 2], ["c", 3]) // => HashMap.make(["a", 1], ["b", 2], ["c", 3])Filtering
Filters out None values from a HashMap of Optionss.
Signature
declare const compact: <K, A>(self: HashMap<K, Option<A>>) => HashMap<K, A>Example
(Compacting Option values)
import { HashMap, Option } from "effect"
const map1 = HashMap.make( ["a", Option.some(1)], ["b", Option.none()], ["c", Option.some(3)])const map2 = HashMap.compact(map1)
map2 // => HashMap.make(["a", 1], ["c", 3])HashMap.get(map2, "a") // => Option.some(1)Filters entries out of a HashMap using the specified predicate.
Signature
declare const filter: { <K, A>(f: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => HashMap<K, A>; <K, A>(self: HashMap<K, A>, f: (a: A, k: K) => boolean): HashMap<K, A>;}Example
(Filtering entries)
import { HashMap } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2], ["c", 3], ["d", 4])const map2 = HashMap.filter(map1, (value) => value % 2 === 0)
map2 // => HashMap.make(["b", 2], ["d", 4])Maps over the entries of the HashMap using the specified filter and keeps
only successful results.
Signature
declare const filterMap: { <A, K, B, X>(f: (input: A, key: K) => Result<B, X>): (self: HashMap<K, A>) => HashMap<K, B>; <K, A, B, X>(self: HashMap<K, A>, f: (input: A, key: K) => Result<B, X>): HashMap<K, B>;}Example
(Filtering and mapping Results)
import { HashMap, Option, Result } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2], ["c", 3], ["d", 4])const map2 = HashMap.filterMap( map1, (value) => value % 2 === 0 ? Result.succeed(value * 2) : Result.failVoid)
map2 // => HashMap.make(["b", 4], ["d", 8])HashMap.get(map2, "b") // => Option.some(4)Folding
Reduces the specified state over the entries of the HashMap.
Signature
declare const reduce: { <Z, V, K>(zero: Z, f: (accumulator: Z, value: V, key: K) => Z): (self: HashMap<K, V>) => Z; <K, V, Z>(self: HashMap<K, V>, zero: Z, f: (accumulator: Z, value: V, key: K) => Z): Z;}Example
(Reducing values)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])HashMap.reduce(map, 0, (acc, value) => acc + value) // => 6Getters
Returns an IterableIterator of the entries within the HashMap.
Signature
declare const entries: <K, V>(self: HashMap<K, V>) => IterableIterator<[K, V]>Example
(Iterating entries)
import { HashMap } from "effect"
// Create a configuration mapconst config = HashMap.make( ["database.host", "localhost"], ["database.port", "5432"], ["cache.enabled", "true"])
// Sort the derived array for deterministic outputconst settings = Array.from(HashMap.entries(config)) .sort(([left], [right]) => left.localeCompare(right)) .map(([key, value]) => `Setting ${key} = ${value}`)
settings // => ["Setting cache.enabled = true", "Setting database.host = localhost", "Setting database.port = 5432"]
// Convert to array when you need all entries at onceArray.from(HashMap.entries(config)).length // => 3Looks up the value for the specified key in the HashMap safely using the
internal hashing function.
Signature
declare const get: { <K1, K>(key: K1): <V>(self: HashMap<K, V>) => Option<V>; <K1, K, V>(self: HashMap<K, V>, key: K1): Option<V>;}Example
(Looking up values)
import { HashMap, Option } from "effect"
const map = HashMap.make(["a", 1], ["b", 2])
HashMap.get(map, "a") // => Option.some(1)HashMap.get(map, "c") // => Option.none()
// Using pipe syntaxHashMap.get("b")(map) // => Option.some(2)Looks up the value for the specified key in the HashMap safely using a custom hash.
Signature
declare const getHash: { <K1, K>(key: K1, hash: number): <V>(self: HashMap<K, V>) => Option<V>; <K1, K, V>(self: HashMap<K, V>, key: K1, hash: number): Option<V>;}Example
(Looking up values with a hash)
import { Hash, HashMap, Option } from "effect"
// Useful when implementing custom equality for complex keysconst userMap = HashMap.make( ["user123", { name: "Alice", role: "admin" }], ["user456", { name: "Bob", role: "user" }])
// Use precomputed hash for performance in hot pathsconst userId = "user123"const precomputedHash = Hash.string(userId)
// Lookup with custom hash (e.g., cached hash value)HashMap.getHash(userMap, userId, precomputedHash) // => Option.some({ name: "Alice", role: "admin" })
// This avoids recomputing the hash when you already have itHashMap.getHash(userMap, "user999", Hash.string("user999")) // => Option.none()Returns an IterableIterator of the keys within the HashMap.
Signature
declare const keys: <K, V>(self: HashMap<K, V>) => IterableIterator<K>Example
(Iterating keys)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])Array.from(HashMap.keys(map)).sort() // => ["a", "b", "c"]Returns the number of entries within the HashMap.
Signature
declare const size: <K, V>(self: HashMap<K, V>) => numberExample
(Getting the size)
import { HashMap } from "effect"
const emptyMap = HashMap.empty<string, number>()const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])
HashMap.size(emptyMap) // => 0HashMap.size(map) // => 3Returns an Array<[K, V]> of the entries within the HashMap.
Signature
declare function toEntries<K, V>(self: HashMap<K, V>): Array<[K, V]>Example
(Converting entries to an array)
import { HashMap } from "effect"
const gameScores = HashMap.make( ["alice", 1250], ["bob", 980], ["charlie", 1100])
// Convert to entries for processingconst scoreEntries = HashMap.toEntries(gameScores)
// Sort by score (descending)const leaderboard = scoreEntries .sort(([, a], [, b]) => b - a) .map(([player, score], rank) => `${rank + 1}. ${player}: ${score}`)
leaderboard // => ["1. alice: 1250", "2. charlie: 1100", "3. bob: 980"]
// Convert back to HashMap if neededHashMap.fromIterable(scoreEntries) // => HashMap.make(["alice", 1250], ["charlie", 1100], ["bob", 980])Returns an Array of the values within the HashMap.
Signature
declare function toValues<K, V>(self: HashMap<K, V>): Array<V>Example
(Converting values to an array)
import { HashMap } from "effect"
const employees = HashMap.make( ["alice", { department: "engineering", salary: 90000 }], ["bob", { department: "marketing", salary: 75000 }], ["charlie", { department: "engineering", salary: 95000 }])
// Extract all employee recordsconst allEmployees = HashMap.toValues(employees)allEmployees.length // => 3
// Calculate total salaryallEmployees.reduce((sum, emp) => sum + emp.salary, 0) // => 260000
// Filter by departmentallEmployees.filter((emp) => emp.department === "engineering").length // => 2Returns an IterableIterator of the values within the HashMap.
Signature
declare const values: <K, V>(self: HashMap<K, V>) => IterableIterator<V>Example
(Iterating values)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])Array.from(HashMap.values(map)).sort() // => [1, 2, 3]Guards
Checks whether a value is a HashMap.
Signature
declare const isHashMap: { <K, V>(u: Iterable<readonly [K, V]>): u is HashMap<K, V>; (u: unknown): u is HashMap<unknown, unknown>;}Example
(Checking HashMap values)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2])const notMap = { a: 1 }
HashMap.isHashMap(map) // => trueHashMap.isHashMap(notMap) // => falseHashMap.isHashMap(null) // => falseMapping
Maps over the entries of the HashMap using the specified function.
Signature
declare const map: { <A, V, K>(f: (value: V, key: K) => A): (self: HashMap<K, V>) => HashMap<K, A>; <K, V, A>(self: HashMap<K, V>, f: (value: V, key: K) => A): HashMap<K, A>;}Example
(Mapping values)
import { HashMap, Option } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2], ["c", 3])const map2 = HashMap.map(map1, (value, key) => `${key}:${value * 2}`)
HashMap.get(map2, "a") // => Option.some("a:2")HashMap.get(map2, "b") // => Option.some("b:4")Models
A HashMap is an immutable key-value data structure that provides efficient lookup, insertion, and deletion operations. It uses a Hash Array Mapped Trie (HAMT) internally for structural sharing and optimal performance.
Signature
interface HashMap<out Key, out Value> extends Iterable<[Key, Value]>, Equal, Pipeable, Inspectable { readonly "~effect/collections/HashMap": "~effect/collections/HashMap";}Example
(Using basic HashMap operations)
import { HashMap, Option } from "effect"
// Create a HashMapconst map = HashMap.make(["a", 1], ["b", 2], ["c", 3])
// Access valuesHashMap.get(map, "a") // => Option.some(1)HashMap.get(map, "d") // => Option.none()
// Check if key existsHashMap.has(map, "b") // => true
// Add/update values (returns new HashMap)HashMap.set(map, "d", 4) // => HashMap.make(["a", 1], ["b", 2], ["c", 3], ["d", 4])Mutations
beginMutation
Creates a transient mutable HashMap for efficient batched updates.
Details
Apply updates to the returned map, then call endMutation to finish the
mutation window and use the result as an immutable HashMap.
Signature
declare const beginMutation: <K, V>(self: HashMap<K, V>) => HashMap<K, V>Example
(Beginning batch mutation)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1])
// Begin mutation for efficient batch operationsconst mutable = HashMap.beginMutation(map)
// Multiple operations are now more efficientHashMap.set(mutable, "b", 2)HashMap.set(mutable, "c", 3)HashMap.remove(mutable, "a")
// End mutation to get final immutable resultHashMap.endMutation(mutable) // => HashMap.make(["b", 2], ["c", 3])endMutation
Marks the HashMap as immutable, completing the mutation cycle.
Signature
declare const endMutation: <K, V>(self: HashMap<K, V>) => HashMap<K, V>Example
(Ending batch mutation)
import { HashMap } from "effect"
// Start with an existing mapconst original = HashMap.make(["x", 10], ["y", 20])
// Begin mutation for batch operationsconst mutable = HashMap.beginMutation(original)
// Perform multiple efficient operationsHashMap.set(mutable, "z", 30)HashMap.remove(mutable, "x")HashMap.set(mutable, "w", 40)
// End mutation to get final immutable resultHashMap.endMutation(mutable) // => HashMap.make(["y", 20], ["z", 30], ["w", 40])Runs a batch of updates against a transient mutable copy of the HashMap
and returns the finalized immutable result.
Details
The callback may call mutation-oriented helpers such as set and remove
on the transient map.
Signature
declare const mutate: { <K, V>(f: (self: HashMap<K, V>) => void): (self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, f: (self: HashMap<K, V>) => void): HashMap<K, V>;}Example
(Applying batched mutations)
import { HashMap } from "effect"
const map1 = HashMap.make(["a", 1])const map2 = HashMap.mutate(map1, (mutable) => { HashMap.set(mutable, "b", 2) HashMap.set(mutable, "c", 3)})map2 // => HashMap.make(["a", 1], ["b", 2], ["c", 3])Other
The HashMap namespace contains type-level utilities and helper types for working with HashMap instances.
Example
(Extracting HashMap types)
import { HashMap } from "effect"
// Create a concrete HashMap for type extractionconst inventory = HashMap.make( ["laptop", { quantity: 5, price: 999 }], ["mouse", { quantity: 20, price: 29 }])
// Extract types for reusetype ProductId = HashMap.HashMap.Key<typeof inventory> // stringtype Product = HashMap.HashMap.Value<typeof inventory> // { quantity: number, price: number }type InventoryEntry = HashMap.HashMap.Entry<typeof inventory> // [string, Product]
// Use extracted types in functionsconst updateInventory = (id: ProductId, product: Product) => HashMap.set(inventory, id, product)
const processEntry = ([id, product]: InventoryEntry) => `${id}: ${product.quantity} @ $${product.price}`
// Example of extracted types in actionconst newProduct: Product = { quantity: 10, price: 199 }const updatedInventory = updateInventory("tablet", newProduct)processEntry(["tablet", newProduct]) // => "tablet: 10 @ $199"updatedInventory // => HashMap.make(["laptop", { quantity: 5, price: 999 }], ["mouse", { quantity: 20, price: 29 }], ["tablet", newProduct])Predicates
Checks whether all entries in a hashmap meets a specific condition.
Signature
declare const every: { <K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => boolean; <K, A>(self: HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean;}Example
(Checking all entries)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])
HashMap.every(map, (value) => value > 0) // => trueHashMap.every(map, (value) => value > 1) // => falseChecks whether the specified key has an entry in the HashMap.
Signature
declare const has: { <K1, K>(key: K1): <K, V>(self: HashMap<K, V>) => boolean; <K1, K, V>(self: HashMap<K, V>, key: K1): boolean;}Example
(Checking for keys)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2])
HashMap.has(map, "a") // => trueHashMap.has(map, "c") // => false
// Using pipe syntaxHashMap.has("b")(map) // => trueChecks whether an element matching the given predicate exists in the given HashMap.
Signature
declare const hasBy: { <K, V>(predicate: (value: NoInfer<V>, key: NoInfer<K>) => boolean): (self: HashMap<K, V>) => boolean; <K, V>(self: HashMap<K, V>, predicate: (value: NoInfer<V>, key: NoInfer<K>) => boolean): boolean;}Example
(Checking entries by predicate)
import { HashMap } from "effect"
const hm = HashMap.make([1, "a"])HashMap.hasBy(hm, (value, key) => value === "a" && key === 1) // => trueHashMap.hasBy(hm, (value) => value === "b") // => falseChecks whether the specified key has an entry in the HashMap using a custom
hash.
Signature
declare const hasHash: { <K1, K>(key: K1, hash: number): <V>(self: HashMap<K, V>) => boolean; <K1, K, V>(self: HashMap<K, V>, key: K1, hash: number): boolean;}Example
(Checking keys with a hash)
import { Hash, HashMap } from "effect"
// Create a map with case-sensitive keysconst userMap = HashMap.make( ["Admin", { role: "administrator" }], ["User", { role: "standard" }])
// Check with exact hashconst exactHash = Hash.string("Admin")HashMap.hasHash(userMap, "Admin", exactHash) // => true
// A matching hash does not override key equalityHashMap.hasHash(userMap, "admin", exactHash) // => false
// A different hash also cannot find the existing keyconst lowercaseHash = Hash.string("admin")HashMap.hasHash(userMap, "Admin", lowercaseHash) // => falseChecks whether the HashMap contains no entries.
Signature
declare const isEmpty: <K, V>(self: HashMap<K, V>) => booleanExample
(Checking for empty HashMaps)
import { HashMap } from "effect"
const emptyMap = HashMap.empty<string, number>()const nonEmptyMap = HashMap.make(["a", 1])
HashMap.isEmpty(emptyMap) // => trueHashMap.isEmpty(nonEmptyMap) // => falseChecks whether any entry in a hashmap meets a specific condition.
Signature
declare const some: { <K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => boolean; <K, A>(self: HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean;}Example
(Checking for any matching entry)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])
HashMap.some(map, (value) => value > 2) // => trueHashMap.some(map, (value) => value > 5) // => falseSearching
Returns the first element that satisfies the specified
predicate, or None if no such element exists.
Signature
declare const findFirst: { <K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => Option<[K, A]>; <K, A>(self: HashMap<K, A>, predicate: (a: A, k: K) => boolean): Option<[K, A]>;}Example
(Finding the first matching entry)
import { HashMap, Option } from "effect"
const map = HashMap.make(["a", 1], ["b", 2], ["c", 3])HashMap.findFirst(map, (value, key) => key === "b" && value > 1) // => Option.some(["b", 2])Sequencing
Maps each entry to a HashMap and flattens the results.
Gotchas
The hash and equality behavior of both maps have to be the same.
Signature
declare const flatMap: { <A, K, B>(f: (value: A, key: K) => HashMap<K, B>): (self: HashMap<K, A>) => HashMap<K, B>; <K, A, B>(self: HashMap<K, A>, f: (value: A, key: K) => HashMap<K, B>): HashMap<K, B>;}Example
(Flat mapping values)
import { HashMap, Option } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2])const map2 = HashMap.flatMap( map1, (value, key) => HashMap.make([key + "1", value], [key + "2", value * 2]))
map2 // => HashMap.make(["a1", 1], ["a2", 2], ["b1", 2], ["b2", 4])HashMap.get(map2, "b2") // => Option.some(4)Transforming
Updates the value of the specified key within the HashMap if it exists.
Signature
declare const modify: { <K, V>(key: K, f: (v: V) => V): (self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, key: K, f: (v: V) => V): HashMap<K, V>;}Example
(Modifying existing values)
import { HashMap, Option } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2])const map2 = HashMap.modify(map1, "a", (value) => value * 3)
HashMap.get(map2, "a") // => Option.some(3)HashMap.get(map2, "b") // => Option.some(2)Sets or removes the specified key using an update function.
Details
The update function receives Some(value) when the key exists or None
when it does not. Returning Some(newValue) stores the value, and returning
None removes the key or leaves it absent.
Signature
declare const modifyAt: { <K, V>(key: K, f: UpdateFn<V>): (self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, key: K, f: UpdateFn<V>): HashMap<K, V>;}Example
(Updating values with Options)
import { HashMap, Option } from "effect"
const map = HashMap.make(["a", 1], ["b", 2])
// Increment existing value or set to 1 if not presentconst updateFn = (option: Option.Option<number>) => Option.isSome(option) ? Option.some(option.value + 1) : Option.some(1)
const updated = HashMap.modifyAt(map, "a", updateFn)HashMap.get(updated, "a") // => Option.some(2)modifyHash
Sets or removes the specified key using a precomputed hash and an update function.
Details
The update function receives Some(value) when the key exists or None
when it does not. Returning Some(newValue) stores the value, and returning
None removes the key or leaves it absent.
Signature
declare const modifyHash: { <K, V>(key: K, hash: number, f: UpdateFn<V>): (self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, key: K, hash: number, f: UpdateFn<V>): HashMap<K, V>;}Example
(Updating values with a hash)
import { Hash, HashMap, Option } from "effect"
// Useful when working with precomputed hashes for performanceconst counters = HashMap.make(["downloads", 100], ["views", 250])
// Cache hash computation for frequently accessed keysconst metricKey = "downloads"const cachedHash = Hash.string(metricKey)
// Update function that increments counter or initializes to 1const incrementCounter = (current: Option.Option<number>) => Option.isSome(current) ? Option.some(current.value + 1) : Option.some(1)
// Use cached hash for efficient updates in loopsconst updated = HashMap.modifyHash( counters, metricKey, cachedHash, incrementCounter)HashMap.get(updated, "downloads") // => Option.some(101)
// Add new metric with precomputed hashconst newMetric = "clicks"const clicksHash = Hash.string(newMetric)const withClicks = HashMap.modifyHash( updated, newMetric, clicksHash, incrementCounter)HashMap.get(withClicks, "clicks") // => Option.some(1)Removes the entry for the specified key in the HashMap using the internal
hashing function.
Signature
declare const remove: { <K>(key: K): <V>(self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, key: K): HashMap<K, V>;}Example
(Removing a key)
import { HashMap } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2], ["c", 3])const map2 = HashMap.remove(map1, "b")
map2 // => HashMap.make(["a", 1], ["c", 3])removeMany
Removes all entries in the HashMap which have the specified keys.
Signature
declare const removeMany: { <K>(keys: Iterable<K>): <V>(self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, keys: Iterable<K>): HashMap<K, V>;}Example
(Removing multiple keys)
import { HashMap } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2], ["c", 3], ["d", 4])const map2 = HashMap.removeMany(map1, ["b", "d"])
map2 // => HashMap.make(["a", 1], ["c", 3])Sets the specified key to the specified value using the internal hashing function.
Signature
declare const set: { <K, V>(key: K, value: V): (self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, key: K, value: V): HashMap<K, V>;}Example
(Setting a value)
import { HashMap } from "effect"
const map1 = HashMap.make(["a", 1])HashMap.set(map1, "b", 2) // => HashMap.make(["a", 1], ["b", 2])
// Original map is unchangedmap1 // => HashMap.make(["a", 1])Sets multiple key-value pairs in the HashMap.
Signature
declare const setMany: { <K, V>(entries: Iterable<readonly [K, V]>): (self: HashMap<K, V>) => HashMap<K, V>; <K, V>(self: HashMap<K, V>, entries: Iterable<readonly [K, V]>): HashMap<K, V>;}Example
(Setting multiple entries)
import { HashMap, Option } from "effect"
const map1 = HashMap.make(["a", 1], ["b", 2])const newEntries = [["c", 3], ["d", 4], ["a", 10]] as const // "a" will be overwrittenconst map2 = HashMap.setMany(map1, newEntries)
map2 // => HashMap.make(["a", 10], ["b", 2], ["c", 3], ["d", 4])HashMap.get(map2, "a") // => Option.some(10)Traversing
Applies the specified function to the entries of the HashMap.
Signature
declare const forEach: { <V, K>(f: (value: V, key: K) => void): (self: HashMap<K, V>) => void; <V, K>(self: HashMap<K, V>, f: (value: V, key: K) => void): void;}Example
(Iterating with side effects)
import { HashMap } from "effect"
const map = HashMap.make(["a", 1], ["b", 2])const collected: Array<[string, number]> = []
HashMap.forEach(map, (value, key) => { collected.push([key, value])})
collected.sort() // => [["a", 1], ["b", 2]]Unsafe
Looks up the value for the specified key in the HashMap unsafely using the
internal hashing function.
When to use
Use when reading from a HashMap by a key known to exist, and throwing is an
acceptable programming error for a missing key.
Gotchas
This function throws an error if the key is not found. Use HashMap.get for
safe access that returns Option.
Signature
declare const getUnsafe: { <K1, K>(key: K1): <V>(self: HashMap<K, V>) => V; <K1, K, V>(self: HashMap<K, V>, key: K1): V;}Example
(Unsafely looking up values)
import { HashMap, Option } from "effect"
const config = HashMap.make( ["api_url", "https://api.example.com"], ["timeout", "5000"], ["retries", "3"])
// Safe: use when you're certain the key existsHashMap.getUnsafe(config, "api_url") // => "https://api.example.com"
// Preferred: use get() for uncertain keysHashMap.get(config, "db_url") // => Option.none()
// This would throw: HashMap.getUnsafe(config, "db_url")// Error: "HashMap.getUnsafe: key not found"