From 25ef5228305a7348e5cf7ccc9472d5c784844001 Mon Sep 17 00:00:00 2001 From: Jimmy Byrd Date: Sat, 16 May 2026 23:01:33 -0400 Subject: [PATCH] Moved ValueTaskValueOption to IcedTasks package - Properly implements valueTask now --- gitbook/SUMMARY.md | 18 ++--- .../FsToolkit.ErrorHandling.IcedTasks.fsproj | 3 + .../ValueTaskValueOption.fs | 74 ++++++++----------- .../ValueTaskValueOptionCE.fs | 46 ++++++------ .../ValueTaskValueOptionOp.fs | 0 .../FsToolkit.ErrorHandling.fsproj | 5 +- ...olkit.ErrorHandling.IcedTasks.Tests.fsproj | 2 + .../ValueTaskValueOptionCE.fs | 3 +- .../FsToolkit.ErrorHandling.Tests.fsproj | 1 - tests/FsToolkit.ErrorHandling.Tests/Main.fs | 1 - 10 files changed, 68 insertions(+), 85 deletions(-) rename src/{FsToolkit.ErrorHandling => FsToolkit.ErrorHandling.IcedTasks}/ValueTaskValueOption.fs (67%) rename src/{FsToolkit.ErrorHandling => FsToolkit.ErrorHandling.IcedTasks}/ValueTaskValueOptionCE.fs (97%) rename src/{FsToolkit.ErrorHandling => FsToolkit.ErrorHandling.IcedTasks}/ValueTaskValueOptionOp.fs (100%) rename tests/{FsToolkit.ErrorHandling.Tests => FsToolkit.ErrorHandling.IcedTasks.Tests}/ValueTaskValueOptionCE.fs (99%) diff --git a/gitbook/SUMMARY.md b/gitbook/SUMMARY.md index cc16a124..c267893b 100644 --- a/gitbook/SUMMARY.md +++ b/gitbook/SUMMARY.md @@ -190,15 +190,6 @@ * [Other Functions](taskValueOption/others.md) * [zip](taskValueOption/zip.md) - * ValueTaskValueOption - * [apply](valueTaskValueOption/apply.md) - * [bind](valueTaskValueOption/bind.md) - * [Computation Expression](valueTaskValueOption/ce.md) - * [either](valueTaskValueOption/either.md) - * [map](valueTaskValueOption/map.md) - * [Other Functions](valueTaskValueOption/others.md) - * [zip](valueTaskValueOption/zip.md) - * TaskResult * [apply](taskResult/apply.md) * [bind](taskResult/bind.md) @@ -349,6 +340,15 @@ * [Other Functions](cancellableValueTaskOption/others.md) * [zip](cancellableValueTaskOption/zip.md) + * ValueTaskValueOption + * [apply](valueTaskValueOption/apply.md) + * [bind](valueTaskValueOption/bind.md) + * [Computation Expression](valueTaskValueOption/ce.md) + * [either](valueTaskValueOption/either.md) + * [map](valueTaskValueOption/map.md) + * [Other Functions](valueTaskValueOption/others.md) + * [zip](valueTaskValueOption/zip.md) + * [CancellableValueTaskResult](cancellableValueTaskResult/index.md) * [apply](cancellableValueTaskResult/apply.md) * [bind](cancellableValueTaskResult/bind.md) diff --git a/src/FsToolkit.ErrorHandling.IcedTasks/FsToolkit.ErrorHandling.IcedTasks.fsproj b/src/FsToolkit.ErrorHandling.IcedTasks/FsToolkit.ErrorHandling.IcedTasks.fsproj index 28da2121..0b4f0071 100644 --- a/src/FsToolkit.ErrorHandling.IcedTasks/FsToolkit.ErrorHandling.IcedTasks.fsproj +++ b/src/FsToolkit.ErrorHandling.IcedTasks/FsToolkit.ErrorHandling.IcedTasks.fsproj @@ -14,6 +14,9 @@ + + + diff --git a/src/FsToolkit.ErrorHandling/ValueTaskValueOption.fs b/src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOption.fs similarity index 67% rename from src/FsToolkit.ErrorHandling/ValueTaskValueOption.fs rename to src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOption.fs index 9fce1e9c..3447b79a 100644 --- a/src/FsToolkit.ErrorHandling/ValueTaskValueOption.fs +++ b/src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOption.fs @@ -1,32 +1,26 @@ namespace FsToolkit.ErrorHandling open System.Threading.Tasks +open IcedTasks [] module ValueTaskValueOption = let inline map ([] f) (ar: ValueTask<_ voption>) = - ValueTask<_ voption>( - task { - let! opt = ar - return ValueOption.map f opt - } - ) + valueTask { + let! opt = ar + return ValueOption.map f opt + } let inline bind ([] f) (ar: ValueTask<_ voption>) = - ValueTask<_ voption>( - task { - let! opt = ar + valueTask { + let! opt = ar - let t = - match opt with - | ValueSome x -> f x - | ValueNone -> ValueTask<_ voption>(ValueNone) - - return! t - } - ) + match opt with + | ValueSome x -> return! f x + | ValueNone -> return ValueNone + } let inline valueSome x = ValueTask<_ voption>(ValueSome x) @@ -34,13 +28,11 @@ module ValueTaskValueOption = bind (fun f' -> bind (fun x' -> valueSome (f' x')) x) f let inline zip (x1: ValueTask<'a voption>) (x2: ValueTask<'b voption>) = - ValueTask<('a * 'b) voption>( - task { - let! r1 = x1 - let! r2 = x2 - return ValueOption.zip r1 r2 - } - ) + valueTask { + let! r1 = x1 + let! r2 = x2 + return ValueOption.zip r1 r2 + } /// /// Returns result of running if it is ValueSome, otherwise returns result of running @@ -56,15 +48,13 @@ module ValueTaskValueOption = ([] onValueNone: unit -> ValueTask<'output>) (input: ValueTask<'input voption>) : ValueTask<'output> = - ValueTask<'output>( - task { - let! opt = input + valueTask { + let! opt = input - match opt with - | ValueSome v -> return! onValueSome v - | ValueNone -> return! onValueNone () - } - ) + match opt with + | ValueSome v -> return! onValueSome v + | ValueNone -> return! onValueNone () + } /// /// Gets the value of the voption if the voption is ValueSome, otherwise returns the specified default value. @@ -75,12 +65,10 @@ module ValueTaskValueOption = /// The voption if the voption is ValueSome, else the default value. /// let inline defaultValue (value: 'value) (valueTaskValueOption: ValueTask<'value voption>) = - ValueTask<'value>( - task { - let! opt = valueTaskValueOption - return ValueOption.defaultValue value opt - } - ) + valueTask { + let! opt = valueTaskValueOption + return ValueOption.defaultValue value opt + } /// /// Gets the value of the voption if the voption is ValueSome, otherwise evaluates and returns the result. @@ -94,9 +82,7 @@ module ValueTaskValueOption = ([] defThunk: unit -> 'value) (valueTaskValueOption: ValueTask<'value voption>) : ValueTask<'value> = - ValueTask<'value>( - task { - let! opt = valueTaskValueOption - return ValueOption.defaultWith defThunk opt - } - ) + valueTask { + let! opt = valueTaskValueOption + return ValueOption.defaultWith defThunk opt + } diff --git a/src/FsToolkit.ErrorHandling/ValueTaskValueOptionCE.fs b/src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOptionCE.fs similarity index 97% rename from src/FsToolkit.ErrorHandling/ValueTaskValueOptionCE.fs rename to src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOptionCE.fs index 0f4207c5..de7fef75 100644 --- a/src/FsToolkit.ErrorHandling/ValueTaskValueOptionCE.fs +++ b/src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOptionCE.fs @@ -10,6 +10,7 @@ open Microsoft.FSharp.Core.CompilerServices.StateMachineHelpers open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Control open Microsoft.FSharp.Collections +open IcedTasks /// ValueTask<'T voption> type ValueTaskValueOption<'T> = ValueTask<'T voption> @@ -431,12 +432,10 @@ module ValueTaskValueOptionCEExtensionsLowPriority = (t: ^TaskLike) : ValueTaskValueOption<'T> = - ValueTask<'T voption>( - task { - let! r = t - return ValueSome r - } - ) + valueTask { + let! r = t + return ValueSome r + } member inline _.Using<'Resource, 'TOverall, 'T when 'Resource :> IDisposableNull> (resource: 'Resource, body: 'Resource -> ValueTaskValueOptionCode<'TOverall, 'T>) @@ -533,31 +532,28 @@ module ValueTaskValueOptionCEExtensionsMediumPriority = type ValueTaskValueOptionBuilderBase with member inline this.Source(t: Task<'T>) : ValueTaskValueOption<'T> = - ValueTask<'T voption>(Task.map ValueSome t) + valueTask { + let! r = t + return ValueSome r + } member inline this.Source(t: Task) : ValueTaskValueOption = - ValueTask( - task { - do! t - return ValueSome() - } - ) + valueTask { + do! t + return ValueSome() + } member inline this.Source(t: ValueTask<'T>) : ValueTaskValueOption<'T> = - ValueTask<'T voption>( - task { - let! r = t - return ValueSome r - } - ) + valueTask { + let! r = t + return ValueSome r + } member inline this.Source(t: ValueTask) : ValueTaskValueOption = - ValueTask( - task { - do! t - return ValueSome() - } - ) + valueTask { + do! t + return ValueSome() + } member inline this.Source(opt: 'T voption) : ValueTaskValueOption<'T> = ValueTask<'T voption>(opt) diff --git a/src/FsToolkit.ErrorHandling/ValueTaskValueOptionOp.fs b/src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOptionOp.fs similarity index 100% rename from src/FsToolkit.ErrorHandling/ValueTaskValueOptionOp.fs rename to src/FsToolkit.ErrorHandling.IcedTasks/ValueTaskValueOptionOp.fs diff --git a/src/FsToolkit.ErrorHandling/FsToolkit.ErrorHandling.fsproj b/src/FsToolkit.ErrorHandling/FsToolkit.ErrorHandling.fsproj index 2990f0fa..8e4f47f8 100644 --- a/src/FsToolkit.ErrorHandling/FsToolkit.ErrorHandling.fsproj +++ b/src/FsToolkit.ErrorHandling/FsToolkit.ErrorHandling.fsproj @@ -41,13 +41,10 @@ - - - @@ -66,4 +63,4 @@ - \ No newline at end of file + diff --git a/tests/FsToolkit.ErrorHandling.IcedTasks.Tests/FsToolkit.ErrorHandling.IcedTasks.Tests.fsproj b/tests/FsToolkit.ErrorHandling.IcedTasks.Tests/FsToolkit.ErrorHandling.IcedTasks.Tests.fsproj index 76bf4aae..3de1d333 100644 --- a/tests/FsToolkit.ErrorHandling.IcedTasks.Tests/FsToolkit.ErrorHandling.IcedTasks.Tests.fsproj +++ b/tests/FsToolkit.ErrorHandling.IcedTasks.Tests/FsToolkit.ErrorHandling.IcedTasks.Tests.fsproj @@ -10,9 +10,11 @@ + + diff --git a/tests/FsToolkit.ErrorHandling.Tests/ValueTaskValueOptionCE.fs b/tests/FsToolkit.ErrorHandling.IcedTasks.Tests/ValueTaskValueOptionCE.fs similarity index 99% rename from tests/FsToolkit.ErrorHandling.Tests/ValueTaskValueOptionCE.fs rename to tests/FsToolkit.ErrorHandling.IcedTasks.Tests/ValueTaskValueOptionCE.fs index 186b2180..87fdac01 100644 --- a/tests/FsToolkit.ErrorHandling.Tests/ValueTaskValueOptionCE.fs +++ b/tests/FsToolkit.ErrorHandling.IcedTasks.Tests/ValueTaskValueOptionCE.fs @@ -1,4 +1,4 @@ -module ValueTaskValueOptionCETests +module FsToolkit.ErrorHandling.IcedTasks.Tests.ValueTaskValueOptionCETests open Expecto open FsToolkit.ErrorHandling @@ -604,6 +604,7 @@ let ``ValueTaskValueOptionCE inference checks`` = |> ignore ] +[] let allTests = testList "ValueTaskValueOption CE Tests" [ ceTests diff --git a/tests/FsToolkit.ErrorHandling.Tests/FsToolkit.ErrorHandling.Tests.fsproj b/tests/FsToolkit.ErrorHandling.Tests/FsToolkit.ErrorHandling.Tests.fsproj index 52c5403b..eedf2526 100644 --- a/tests/FsToolkit.ErrorHandling.Tests/FsToolkit.ErrorHandling.Tests.fsproj +++ b/tests/FsToolkit.ErrorHandling.Tests/FsToolkit.ErrorHandling.Tests.fsproj @@ -20,7 +20,6 @@ - diff --git a/tests/FsToolkit.ErrorHandling.Tests/Main.fs b/tests/FsToolkit.ErrorHandling.Tests/Main.fs index f6caf4c5..590fc32d 100644 --- a/tests/FsToolkit.ErrorHandling.Tests/Main.fs +++ b/tests/FsToolkit.ErrorHandling.Tests/Main.fs @@ -43,7 +43,6 @@ let allTests = TaskOptionCETests.allTests TaskValueOptionTests.allTests TaskValueOptionCETests.allTests - ValueTaskValueOptionCETests.allTests TaskResultTests.allTests TaskResultCETests.allTests TaskResultOptionTests.allTests