Skip to content

Commit f822f8f

Browse files
committed
AsyncSeq.replicate
1 parent 5b1a1eb commit f822f8f

2 files changed

Lines changed: 11 additions & 2 deletions

File tree

src/FSharpx.Async/AsyncSeq.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ module AsyncSeq =
3535
let singleton (v:'T) : AsyncSeq<'T> =
3636
async { return Cons(v, empty) }
3737

38+
/// Creates an async sequence which repeats the specified value indefinitely.
39+
let rec replicate (v:'T) : AsyncSeq<'T> =
40+
Cons(v, async.Delay <| fun() -> replicate v) |> async.Return
41+
3842
/// Yields all elements of the first asynchronous sequence and then
3943
/// all elements of the second asynchronous sequence.
4044
let rec append (seq1: AsyncSeq<'T>) (seq2: AsyncSeq<'T>) : AsyncSeq<'T> =

tests/FSharpx.Async.Tests/AsyncSeqTests.fs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ let ``AsyncSeq.merge should be fair``() =
201201
let expected = [2;1] |> AsyncSeq.ofSeq
202202
Assert.True(EQ expected actual)
203203

204-
205-
204+
[<Test>]
205+
let ``AsyncSeq.replicate``() =
206+
let c = 10
207+
let x = "hello"
208+
let actual = AsyncSeq.replicate x |> AsyncSeq.take c
209+
let expected = List.replicate c x |> AsyncSeq.ofSeq
210+
Assert.True(EQ expected actual)
206211

0 commit comments

Comments
 (0)