Skip to content

[Repo Assist] feat: add map, filter, iter, exists, forall, toList, toArray to Queue and Deque#241

Draft
github-actions[bot] wants to merge 2 commits intomasterfrom
repo-assist/improve-queue-deque-functions-20260310-abe469ac1b3fa769
Draft

[Repo Assist] feat: add map, filter, iter, exists, forall, toList, toArray to Queue and Deque#241
github-actions[bot] wants to merge 2 commits intomasterfrom
repo-assist/improve-queue-deque-functions-20260310-abe469ac1b3fa769

Conversation

@github-actions
Copy link
Contributor

🤖 This PR was created by Repo Assist, an automated AI assistant.

Adds seven commonly used collection functions to the Queue and Deque modules. Partially addresses #152 (Align Collection Module functions with FSharp.Collections).

Changes

New functions (Queue and Deque)

Function Complexity Description
map f q O(n) Transform each element, returning a Queue/Deque
filter pred q O(n) Keep only elements satisfying the predicate
iter f q O(n) Apply a side-effecting function to each element (FIFO order)
exists pred q O(n) Test whether any element satisfies a predicate
forall pred q O(n) Test whether all elements satisfy a predicate
toList q O(n) Convert to list in FIFO order
toArray q O(n) Convert to array in FIFO order

All functions preserve FIFO element order. Signatures added to .fsi files. 21 new tests added.

Implementation notes

Queue.map directly maps over the internal front and rBack lists, preserving the queue structure without any rebuilding — very efficient.

Queue.filter handles the invariant that front should not be empty for a non-empty queue: if filtering removes all front elements, List.rev rBack becomes the new front.

Deque.map similarly maps directly over both internal lists. Deque.filter is simpler since Deque tolerates an empty front (it falls back to rBack).

exists and forall can check rBack in any order (order only matters for iter, toList, toArray).

Test Status

All 731 tests pass (6 pre-existing ptest skips unrelated to this PR):

Passed! - Failed: 0, Passed: 731, Skipped: 6, Total: 737

Generated by Repo Assist ·

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/repo-assist.md@346204513ecfa08b81566450d7d599556807389f

… and Deque modules

Adds commonly needed collection functions to Queue and Deque that
were present in F# List but missing from these modules. Addresses
part of #152 (Align Collection Module functions with FSharp.Collections).

New functions for both Queue and Deque:
- map       : transform each element, returning the same collection type
- filter    : keep elements matching a predicate
- iter      : apply a side-effecting function to each element (FIFO order)
- exists    : test whether any element satisfies a predicate
- forall    : test whether all elements satisfy a predicate
- toList    : convert to list in FIFO order
- toArray   : convert to array in FIFO order

All seven functions are O(n) and preserve FIFO element order.
21 new tests added (QueueTest and DequeTest), all passing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
github-actions bot added a commit that referenced this pull request Mar 13, 2026
… tests

Adds six new module-level functions to DList, mirroring the functions
added to Queue and Deque in #241, and further addressing #152.

- DList.map: transforms all elements using a function
- DList.filter: retains elements matching a predicate
- DList.iter: applies an action to each element in order
- DList.exists: short-circuit check if any element matches
- DList.forall: short-circuit check if all elements match
- DList.toArray: returns elements as an array

map and filter are implemented via foldBack so they build a DList
directly (preserving the length invariant). iter/exists/forall/toArray
delegate to the IEnumerable<'T> implementation for correct short-circuit
behaviour.

Also adds 21 new tests: 14 unit tests and 7 property-based tests that
verify results match standard List/Array equivalents.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants