Skip to content

Commit cb4e7eb

Browse files
authored
Merge TaskResult into Core lib (#285)
1 parent a923a57 commit cb4e7eb

24 files changed

+142
-196
lines changed

FsToolkit.ErrorHandling.sln

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{D8B86171
1111
EndProject
1212
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsToolkit.ErrorHandling.Tests", "tests\FsToolkit.ErrorHandling.Tests\FsToolkit.ErrorHandling.Tests.fsproj", "{F646F4E8-EA06-4EA8-9CD3-79778B264320}"
1313
EndProject
14-
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsToolkit.ErrorHandling.TaskResult", "src\FsToolkit.ErrorHandling.TaskResult\FsToolkit.ErrorHandling.TaskResult.fsproj", "{EA9FB942-F6A4-4539-9377-A2DBE73861FC}"
15-
EndProject
1614
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsToolkit.ErrorHandling.TaskResult.Tests", "tests\FsToolkit.ErrorHandling.TaskResult.Tests\FsToolkit.ErrorHandling.TaskResult.Tests.fsproj", "{868CA980-5903-480E-8360-C51F5EC83275}"
1715
EndProject
1816
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsToolkit.ErrorHandling.JobResult", "src\FsToolkit.ErrorHandling.JobResult\FsToolkit.ErrorHandling.JobResult.fsproj", "{5B1EA296-538E-40E5-BF1D-6CB0F20BB52E}"
@@ -72,18 +70,6 @@ Global
7270
{F646F4E8-EA06-4EA8-9CD3-79778B264320}.Release|x64.Build.0 = Release|Any CPU
7371
{F646F4E8-EA06-4EA8-9CD3-79778B264320}.Release|x86.ActiveCfg = Release|Any CPU
7472
{F646F4E8-EA06-4EA8-9CD3-79778B264320}.Release|x86.Build.0 = Release|Any CPU
75-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
76-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
77-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Debug|x64.ActiveCfg = Debug|Any CPU
78-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Debug|x64.Build.0 = Debug|Any CPU
79-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Debug|x86.ActiveCfg = Debug|Any CPU
80-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Debug|x86.Build.0 = Debug|Any CPU
81-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
82-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Release|Any CPU.Build.0 = Release|Any CPU
83-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Release|x64.ActiveCfg = Release|Any CPU
84-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Release|x64.Build.0 = Release|Any CPU
85-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Release|x86.ActiveCfg = Release|Any CPU
86-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC}.Release|x86.Build.0 = Release|Any CPU
8773
{868CA980-5903-480E-8360-C51F5EC83275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
8874
{868CA980-5903-480E-8360-C51F5EC83275}.Debug|Any CPU.Build.0 = Debug|Any CPU
8975
{868CA980-5903-480E-8360-C51F5EC83275}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -220,7 +206,6 @@ Global
220206
GlobalSection(NestedProjects) = preSolution
221207
{E0466000-F8E4-416B-B605-C65F7602367A} = {E28025A7-EF6A-45BF-8FA0-75E394D3D42B}
222208
{F646F4E8-EA06-4EA8-9CD3-79778B264320} = {D8B86171-2147-49EF-8ADA-1CF8B0A20D40}
223-
{EA9FB942-F6A4-4539-9377-A2DBE73861FC} = {E28025A7-EF6A-45BF-8FA0-75E394D3D42B}
224209
{868CA980-5903-480E-8360-C51F5EC83275} = {D8B86171-2147-49EF-8ADA-1CF8B0A20D40}
225210
{5B1EA296-538E-40E5-BF1D-6CB0F20BB52E} = {E28025A7-EF6A-45BF-8FA0-75E394D3D42B}
226211
{7DABAB8F-4A02-4992-A3A2-6C550F98C13B} = {D8B86171-2147-49EF-8ADA-1CF8B0A20D40}

src/FsToolkit.ErrorHandling.IcedTasks/FsToolkit.ErrorHandling.IcedTasks.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ItemGroup>
1717
<ItemGroup>
1818
<ProjectReference
19-
Include="..\FsToolkit.ErrorHandling.TaskResult\FsToolkit.ErrorHandling.TaskResult.fsproj" />
19+
Include="..\FsToolkit.ErrorHandling\FsToolkit.ErrorHandling.fsproj" />
2020
</ItemGroup>
2121
<Import Project="..\..\.paket\Paket.Restore.targets" />
2222
</Project>
Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project Sdk="Microsoft.NET.Sdk">
3-
<PropertyGroup>
4-
<OutputType>Library</OutputType>
5-
<TargetFrameworks>netstandard2.1;netstandard2.0</TargetFrameworks>
6-
<DebugType>portable</DebugType>
7-
</PropertyGroup>
8-
<ItemGroup>
9-
<Compile Include="Result.fs" />
10-
<Compile Include="Job.fs" />
11-
<Compile Include="JobResult.fs" />
12-
<Compile Include="JobResultCE.fs" />
13-
<Compile Include="JobResultOp.fs" />
14-
<Compile Include="JobOption.fs" />
15-
<Compile Include="JobOptionCE.fs" />
16-
<Compile Include="JobOptionOp.fs" />
17-
<Compile Include="List.fs" />
18-
<Compile Include="JobResultOption.fs" />
19-
<Compile Include="JobResultOptionCE.fs" />
20-
<Compile Include="JobResultOptionOp.fs" />
21-
<None Include="paket.references" />
22-
<Watch Include="@(None)" />
23-
</ItemGroup>
24-
<ItemGroup>
25-
<ProjectReference Include="..\FsToolkit.ErrorHandling.TaskResult\FsToolkit.ErrorHandling.TaskResult.fsproj" />
26-
</ItemGroup>
27-
<Import Project="..\..\.paket\Paket.Restore.targets" />
28-
</Project>
3+
<PropertyGroup>
4+
<OutputType>Library</OutputType>
5+
<TargetFrameworks>netstandard2.1;netstandard2.0</TargetFrameworks>
6+
<DebugType>portable</DebugType>
7+
</PropertyGroup>
8+
<ItemGroup>
9+
<Compile Include="Result.fs" />
10+
<Compile Include="Job.fs" />
11+
<Compile Include="JobResult.fs" />
12+
<Compile Include="JobResultCE.fs" />
13+
<Compile Include="JobResultOp.fs" />
14+
<Compile Include="JobOption.fs" />
15+
<Compile Include="JobOptionCE.fs" />
16+
<Compile Include="JobOptionOp.fs" />
17+
<Compile Include="List.fs" />
18+
<Compile Include="JobResultOption.fs" />
19+
<Compile Include="JobResultOptionCE.fs" />
20+
<Compile Include="JobResultOptionOp.fs" />
21+
<None Include="paket.references" />
22+
<Watch Include="@(None)" />
23+
</ItemGroup>
24+
<ItemGroup>
25+
<ProjectReference Include="..\FsToolkit.ErrorHandling\FsToolkit.ErrorHandling.fsproj" />
26+
</ItemGroup>
27+
<Import Project="..\..\.paket\Paket.Restore.targets" />
28+
</Project>

src/FsToolkit.ErrorHandling.TaskResult/AssemblyInfo.fs

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

src/FsToolkit.ErrorHandling.TaskResult/FsToolkit.ErrorHandling.TaskResult.fsproj

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

src/FsToolkit.ErrorHandling.TaskResult/List.fs

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

src/FsToolkit.ErrorHandling.TaskResult/Result.fs

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

src/FsToolkit.ErrorHandling.TaskResult/paket.references

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

src/FsToolkit.ErrorHandling/FsToolkit.ErrorHandling.fsproj

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
<?xml version="1.0" encoding="utf-8"?>
21
<Project Sdk="Microsoft.NET.Sdk">
32
<PropertyGroup>
43
<OutputType>Library</OutputType>
54
<TargetFrameworks>netstandard2.1;netstandard2.0</TargetFrameworks>
65
<LangVersion>preview</LangVersion>
76
<DebugType>portable</DebugType>
8-
7+
<NoWarn>FS1204;FS3511;FS3513</NoWarn>
98
<PackageTags>$(PackageTags), fable-library, fable-dotnet, fable-javascript, fable-python</PackageTags>
109
</PropertyGroup>
1110
<ItemGroup>
@@ -19,9 +18,16 @@
1918
<Compile Include="ResultOptionCE.fs" />
2019
<Compile Include="ResultOptionOp.fs" />
2120
<Compile Include="Async.fs" />
21+
<Compile Include="Task.fs" Condition="'$(FABLE_COMPILER)' != 'true'" />
22+
<Compile Include="TaskOp.fs" Condition="'$(FABLE_COMPILER)' != 'true'" />
2223
<Compile Include="AsyncResult.fs" />
2324
<Compile Include="AsyncResultCE.fs" />
2425
<Compile Include="AsyncResultOp.fs" />
26+
<Compile Include="TaskResult.fs" Condition="'$(FABLE_COMPILER)' != 'true'" />
27+
<Compile Include="TaskResultCE.fs"
28+
Condition="'$(FABLE_COMPILER)' != 'true'" />
29+
<Compile Include="TaskResultOp.fs"
30+
Condition="'$(FABLE_COMPILER)' != 'true'" />
2531
<Compile Include="Validation.fs" />
2632
<Compile Include="ValidationOp.fs" />
2733
<Compile Include="ValidationCE.fs" />
@@ -33,9 +39,20 @@
3339
<Compile Include="AsyncOption.fs" />
3440
<Compile Include="AsyncOptionCE.fs" />
3541
<Compile Include="AsyncOptionOp.fs" />
42+
<Compile Include="TaskOption.fs" Condition="'$(FABLE_COMPILER)' != 'true'" />
43+
<Compile Include="TaskOptionCE.fs"
44+
Condition="'$(FABLE_COMPILER)' != 'true'" />
45+
<Compile Include="TaskOptionOp.fs"
46+
Condition="'$(FABLE_COMPILER)' != 'true'" />
3647
<Compile Include="AsyncResultOption.fs" />
3748
<Compile Include="AsyncResultOptionCE.fs" />
3849
<Compile Include="AsyncResultOptionOp.fs" />
50+
<Compile Include="TaskResultOption.fs"
51+
Condition="'$(FABLE_COMPILER)' != 'true'" />
52+
<Compile Include="TaskResultOptionCE.fs"
53+
Condition="'$(FABLE_COMPILER)' != 'true'" />
54+
<Compile Include="TaskResultOptionOp.fs"
55+
Condition="'$(FABLE_COMPILER)' != 'true'" />
3956
<Compile Include="List.fs" />
4057
<Compile Include="Array.fs" />
4158
<Compile Include="Seq.fs" />
@@ -45,7 +62,7 @@
4562
</ItemGroup>
4663
<!-- Add source files to "fable" folder in Nuget package -->
4764
<ItemGroup>
48-
<Content Include="*.fsproj; **\*.fs" PackagePath="fable\" />
65+
<Content Include="*.fsproj; **\*.fs" Exclude="Task.fs; **\Task*.fs" PackagePath="fable\" />
4966
</ItemGroup>
5067
<Import Project="..\..\.paket\Paket.Restore.targets" />
5168
</Project>

src/FsToolkit.ErrorHandling/List.fs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,4 +215,63 @@ module List =
215215
/// <returns>A <see cref="Option{T}"/> representing the sequence of results.</returns>
216216
let sequenceVOptionM xs = traverseVOptionM id xs
217217

218+
219+
open System.Threading.Tasks
220+
221+
let private traverseTaskResultM' (f: 'c -> Task<Result<'a, 'b>>) (xs: 'c list) =
222+
let mutable state = Ok []
223+
let mutable index = 0
224+
225+
let xs =
226+
xs
227+
|> List.toArray
228+
229+
task {
230+
while state
231+
|> Result.isOk
232+
&& index < xs.Length do
233+
let! r =
234+
xs
235+
|> Array.item index
236+
|> f
237+
238+
index <- index + 1
239+
240+
match (r, state) with
241+
| Ok y, Ok ys -> state <- Ok(y :: ys)
242+
| Error e, _ -> state <- Error e
243+
| _, _ -> ()
244+
245+
return
246+
state
247+
|> Result.map List.rev
248+
}
249+
250+
let traverseTaskResultM f xs = traverseTaskResultM' f xs
251+
252+
let sequenceTaskResultM xs = traverseTaskResultM id xs
253+
254+
let private traverseTaskResultA' (f: 'c -> Task<Result<'a, 'b>>) (xs: 'c list) =
255+
let mutable state = Ok []
256+
257+
task {
258+
for x in xs do
259+
let! r = f x
260+
261+
match (r, state) with
262+
| Ok y, Ok ys -> state <- Ok(y :: ys)
263+
| Error e, Error errs -> state <- Error(e :: errs)
264+
| Ok _, Error e -> state <- Error e
265+
| Error e, Ok _ -> state <- Error [ e ]
266+
267+
return
268+
state
269+
|> Result.eitherMap List.rev List.rev
270+
}
271+
272+
let traverseTaskResultA f xs = traverseTaskResultA' f xs
273+
274+
let sequenceTaskResultA xs = traverseTaskResultA id xs
275+
276+
218277
#endif

0 commit comments

Comments
 (0)