Skip to content

Commit a673d90

Browse files
committed
feat: implement map, iter and length
1 parent 1e92f99 commit a673d90

File tree

5 files changed

+34
-86
lines changed

5 files changed

+34
-86
lines changed

Directory.Packages.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<PackageVersion Include="NuGet.Common" Version="6.11.1" />
2323
<PackageVersion Include="NuGet.Protocol" Version="6.11.1" />
2424
<PackageVersion Include="Octokit" Version="13.0.1" />
25+
<PackageVersion Include="R3" Version="1.2.9" />
2526
<PackageVersion Include="Unquote" Version="7.0.0" />
2627
</ItemGroup>
27-
</Project>
28+
</Project>

src/FSharp.Control.R3/FSharp.Control.R3.fsproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616

1717
<ItemGroup>
1818
<Compile Include="AssemblyInfo.fs" />
19-
<Compile Include="Library.fs" />
19+
<Compile Include="Observable.fs" />
2020
</ItemGroup>
2121

2222
<ItemGroup>
2323
<PackageReference Include="Microsoft.SourceLink.GitHub">
2424
<PrivateAssets>all</PrivateAssets>
2525
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2626
</PackageReference>
27+
<PackageReference Include="R3" />
2728
</ItemGroup>
2829
</Project>

src/FSharp.Control.R3/Library.fs

Lines changed: 0 additions & 54 deletions
This file was deleted.

src/FSharp.Control.R3/Observable.fs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module FSharp.Control.Observable
2+
3+
open R3
4+
open System.Threading
5+
open System.Threading.Tasks
6+
7+
let asyncMap (f : 't -> Async<'r>) source =
8+
let selector x ct = ValueTask<'r> (Async.StartImmediateAsTask (f x, ct))
9+
ObservableExtensions.SelectAwait (source, selector)
10+
11+
let mapAsync (f : CancellationToken -> 't -> Task<'r>) source =
12+
let selector x ct = ValueTask<'r> (f ct x)
13+
ObservableExtensions.SelectAwait (source, selector)
14+
15+
let inline map (f : 't -> 'r) source = ObservableExtensions.Select (source, f)
16+
17+
let length source = async {
18+
let! ct = Async.CancellationToken
19+
return!
20+
ObservableExtensions.CountAsync (source, ct)
21+
|> Async.AwaitTask
22+
}
23+
24+
let inline iter (action : 't -> unit) source = ObservableExtensions.ForEachAsync (source, action)
25+
26+
let asyncIter (action : 't -> Async<unit>) source = source |> asyncMap action |> length |> Async.Ignore
27+
28+
let iterAsync (action : CancellationToken -> 't -> Task<unit>) source = source |> mapAsync action |> length |> Async.Ignore
Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,9 @@
11
namespace FSharp.Control.R3.Tests
22

33
open System
4-
open FSharp.Control.R3
5-
open FSharp.Control.R3.Say
4+
open FSharp.Control
65
open Microsoft.VisualStudio.TestTools.UnitTesting
76
open Swensen.Unquote
87

98
[<TestClass>]
10-
type SayTests () =
11-
12-
member _.``Add two integers`` () =
13-
let subject = Say.add 1 2
14-
test <@ subject = 3 @>
15-
//Assert.AreEqual (subject, 3, message = "Addition works")
16-
17-
member _.``Say nothing`` () =
18-
let subject = Say.nothing ()
19-
Assert.AreEqual (subject, (), "Not an absolute unit")
20-
21-
member _.``Say hello all`` () =
22-
let person = {
23-
Name = "Jean-Luc Picard"
24-
FavoriteNumber = 4
25-
FavoriteColor = Red
26-
DateOfBirth = DateTimeOffset.Parse ("July 13, 2305")
27-
}
28-
29-
let subject = Say.helloPerson person
30-
31-
test <@ subject = "Hello Jean-Luc Picard. You were born on 2305/07/13 and your favorite number is 4. You like Red." @>
32-
33-
//Assert.AreEqual<String> (
34-
// subject,
35-
// "Hello Jean-Luc Picard. You were born on 2305/07/13 and your favorite number is 4. You like Red.",
36-
// message = "You didn't say hello"
37-
//)
9+
type SayTests () = class end

0 commit comments

Comments
 (0)