Skip to content

Add LazyList.consLazy #134

Closed
Closed

Description

@brianberns

Description

Conceptually, a LazyList<'T> contains a head of type 'T and a tail of type Lazy<LazyList<'T>>. Strangely, there is no direct way to construct such a lazy list using the current API. The best can be done is LazyList.consDelayed head (fun () -> tail.Value), which is unnecessarily wasteful.

I suggest a new function for creating such a list: LazyList.consLazy (head : <'T>) (tail : Lazy<LazyList<'T>>).

For bonus points, also provide an infix operator that can be used for clarity. I suggest something like (@).

Desired result

I should be able to create an infinite list of 1's like this: let rec ones = 1 @ lazy ones.

Known workarounds

consDelayed can be used but it is inelegant and wasteful.

Activity

  1. gdziadkiewicz commented on Oct 13, 2019

    @gdziadkiewicz
    Collaborator

    In F# @ is the list concatenation operator. To make it more aligned with the language shouldn't it be something along the lines of cons ::?

  2. github-actions commented on Mar 13, 2026

    @github-actions
  3. gdziadkiewicz commented on May 16, 2026

    @gdziadkiewicz
    Collaborator

    @copilot Add override for the @ operator that does consLazy

  4. github-actions commented on Oct 22, 2026

    @github-actions
    Contributor

    🤖 This is an automated response from Repo Assist.

    LazyList.consLazy is now on main (src/FSharpx.Collections/LazyList.fsi, with tests in LazyListTests.fs), so the original request looks fulfilled.

    On the follow-up about @: in F# (@) is a fixed list-only function rather than an overloadable operator. A type can't override it, and shadowing it globally would break list append. A custom infix operator such as @@ is the practical route, if one is wanted.

    Unless an operator is still wanted, this issue could probably be closed.

    Generated by 🌈 Repo Assist, see workflow run. Learn more.
    Comment /repo-assist to run again

    Add this agentic workflow to your repo

    To install this agentic workflow, run

    gh aw add githubnext/agentics/workflows/repo-assist.md@b4e175bab6674279e0fe158f7dc877b77bc9d92f
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions