FSharpx.Collections icon indicating copy to clipboard operation
FSharpx.Collections copied to clipboard

Add LazyList.consLazy

Open brianberns opened this issue 6 years ago • 1 comments

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.

brianberns avatar Jun 05 '19 20:06 brianberns

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 ::?

gdziadkiewicz avatar Oct 13 '19 08:10 gdziadkiewicz