--- title: Working with Immutable Arrays using Data.array id: data-array skillLevel: beginner applicationPatternId: core-concepts summary: >- Use Data.array to create immutable, type-safe arrays that support value-based equality and safe functional operations. tags: - Data.array - array - structural-equality - immutable - data-type - effect rule: description: >- Use Data.array to define arrays whose equality is based on their contents, enabling safe, predictable comparisons and functional operations. related: - use-chunk-for-high-performance-collections - data-struct - data-tuple author: PaulJPhilp lessonOrder: 24 --- # Working with Immutable Arrays using `Data.array` ## Guideline Use `Data.array` to create immutable, type-safe arrays that support value-based equality and safe functional operations. This is useful for modeling ordered collections where immutability and structural equality are important. ## Rationale JavaScript arrays are mutable and compared by reference, which can lead to bugs in value-based logic and concurrent code. `Data.array` provides immutable arrays with structural equality, making them ideal for functional programming and safe domain modeling. ## Good Example ```typescript import { Data, Equal } from "effect"; // Create two structurally equal arrays const arr1 = Data.array([1, 2, 3]); const arr2 = Data.array([1, 2, 3]); // Compare by value, not reference const areEqual = Equal.equals(arr1, arr2); // true // Use arrays as keys in a HashSet or Map import { HashSet } from "effect"; const set = HashSet.make(arr1); console.log(HashSet.has(set, arr2)); // true // Functional operations (map, filter, etc.) const doubled = arr1.map((n) => n * 2); // Data.array([2, 4, 6]) ``` **Explanation:** - `Data.array` creates immutable arrays with value-based equality. - Useful for modeling ordered collections in a safe, functional way. - Supports all standard array operations, but with immutability and structural equality. ## Anti-Pattern Using plain JavaScript arrays for value-based logic, as keys in sets/maps, or in concurrent code, which can lead to bugs due to mutability and reference-based comparison.