Skip to content

Rebase impl, docs and surface API on FSharp.Core v 11 APIs - #373

Open
bartelink wants to merge 30 commits into
demystifyfp:masterfrom
bartelink:fscore11-shims
Open

bartelink wants to merge 30 commits into
demystifyfp:masterfrom
bartelink:fscore11-shims

Conversation

@bartelink

@bartelink bartelink commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

FSharp.Core adds utility functions for Async, Task, ValueTask as covered in fsharp/fslang-suggestions#1466 and fsharp/fslang-suggestions#1467 that overlap significantly / borrow from FsToolkit.Error Handling.

In the short term, there are some signature clashes (Task.catch in FSharp.Core 11 returns Result, not Choice)
In the medium term, this repo won't yet adopt SDK 11, and the net9.0 and earlier builds won't have access to the new Async.Await.

In the long term that stuff gets removed from here and removed from the docs

Thus this PR:

  • adds a net10 TFM build that:
    • references FSharp.Core 11 (-rc1, which is reasonable given v6 here on master is in beta)
    • has signatures consistent with the long term names (remove Task.catch to avoid the clash)
    • has names consistent with the FSharp.Core names
      • removes Task/Async/others.singleton (in favor ofTask.result), Result.valueOr (Result.defaultWith)
        • v6 will probably do a breaking change to rename singleton to result for consistency
      • removes things that shadow FSharp.Core intrinsics (e.g. Result.map,mapError, bind, defaultValue, defaultWith, isOk, isError,)
  • does shimming and minor changes for net9/net6/Fable
    • adds as many shims as possible for e.g. Async.Await, Task., Async.

NOTE The FSharp.Core shims re Async and Task match the behavior (pass the test suite) and surface area with the following deviations:

  • Async.Await does not fully replicated the nested stack trace preservation behavior that FSharp.Core v7 provides (top level stack trace is shown, but the full trace during a trampolined nested call can only be provided by the real implementation). (Obviously it does the unwrapping demanded by Task to AsyncResult transition wraps Exception into the AggregateException #154 etc)
  • the TaskLike Async.Wait versions (and related StartTaskImmediate helpers) are excluded due to compilation issues in the tests (you end up disambiguating via Async.Await as Async.Await<_> to exclude a clash with Async.Await<_, _, _ ) which does not present with the real FSharp.Core's API surface).

Resolves #372
Resolves #154
Resolves #361

@bartelink bartelink changed the title FSharp.Core interop FSharp.Core 11 interop Sep 11, 2026
@bartelink bartelink changed the title FSharp.Core 11 interop FSharp.Core 11 interop/shimming Sep 11, 2026
@bartelink
bartelink force-pushed the fscore11-shims branch 6 times, most recently from 396bce5 to 84fb50a Compare September 13, 2026 22:55
Comment thread gitbook/SUMMARY.md Outdated
* [map2](job/map2.md)
* [map3](job/map3.md)
* [singleton](job/singleton.md)
* [result](job/result.md)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we could just remove this as this is the builtin one from Hopac

[<System.Obsolete "Use JobOption.some instead (aligns with AsyncResult naming)">]
let inline singleton x = some x

//TODO should these be added alongside all `some` ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thoughts?

map box input1
map box input2
|],
maxDegreeOfParallelism = 2

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does not achieve anything

@bartelink
bartelink marked this pull request as ready for review September 14, 2026 03:00
Copilot AI lite review requested due to automatic review settings September 14, 2026 03:00
@bartelink

bartelink commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

@TheAngryByrd still WIP but worth a review now:

  • Ended up putting full shims for new FSharp.Core 11 Task and Async modules (but not ValueTask)
  • Await and usage of same in favor of AwaitTask is still todo. Arguably that should be a separate PR
  • ignore should probably gain RequiresExplicitTypeArguments for Job etc to align with Task/Async
  • should the Option variants have a none alongside some? (see self-review comment)
  • anything else (I don't have energy/capacity/spare credits to expand docs but think I've tracked all renames) ?
  • arguably docs should be removed for Task/Async functions that move to FSharp Core and Job.result (intrinsic to Hopac). See (from FSharp.Core) annotations in summary.md

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unresolved critical build and cancellation issues remain, along with moderate documentation and test-target defects.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Adds .NET 10/FSharp.Core 11 interoperability, compatibility shims for older targets, API renames, and related test and documentation updates.

Changes:

  • Adds conditional Async/Task shims and .NET 10 targeting.
  • Aligns constructors and exception-handling APIs with FSharp.Core conventions.
  • Updates source, tests, build configuration, benchmarks, and documentation.
File summaries
File Reviewed changes and findings
tests/FsToolkit.ErrorHandling.Tests/TaskValueOptionCE.fs Updates task/value-option CE tests.
tests/FsToolkit.ErrorHandling.Tests/TaskValueOption.fs Replaces task constructor usages.
tests/FsToolkit.ErrorHandling.Tests/TaskValidationCE.fs Updates validation CE tests.
tests/FsToolkit.ErrorHandling.Tests/TaskValidation.fs Updates task constructors.
tests/FsToolkit.ErrorHandling.Tests/TaskResultOption.fs Updates result-option constructors.
tests/FsToolkit.ErrorHandling.Tests/TaskResultCE.fs Updates result CE tests.
tests/FsToolkit.ErrorHandling.Tests/TaskResult.fs Updates catch-related tests.
tests/FsToolkit.ErrorHandling.Tests/TaskOptionCE.fs Updates option CE tests.
tests/FsToolkit.ErrorHandling.Tests/TaskOption.fs Updates option constructors.
tests/FsToolkit.ErrorHandling.Tests/Result.fs Updates defaulting tests.
tests/FsToolkit.ErrorHandling.Tests/ParallelAsyncValidationCE.fs Updates async constructors.
tests/FsToolkit.ErrorHandling.Tests/ParallelAsyncResultCE.fs Updates async constructors.
tests/FsToolkit.ErrorHandling.Tests/Option.fs Updates async/task constructors.
tests/FsToolkit.ErrorHandling.Tests/FsToolkit.ErrorHandling.Tests.fsproj Adds .NET 10 testing.
tests/FsToolkit.ErrorHandling.Tests/BackgroundTaskValueOptionCE.fs Updates background-task CE tests.
tests/FsToolkit.ErrorHandling.Tests/BackgroundTaskResultCE.fs Updates background-task result tests.
tests/FsToolkit.ErrorHandling.Tests/BackgroundTaskOptionCE.fs Updates background-task option tests.
tests/FsToolkit.ErrorHandling.Tests/AsyncValidation.fs Updates async validation constructors.
tests/FsToolkit.ErrorHandling.Tests/AsyncResultOptionCE.fs Updates result-option constructors.
tests/FsToolkit.ErrorHandling.Tests/AsyncResultCE.fs Updates async result tests.
tests/FsToolkit.ErrorHandling.Tests/AsyncResult.fs Updates catch tests.
tests/FsToolkit.ErrorHandling.Tests/AsyncOptionCE.fs Updates async option CE tests.
tests/FsToolkit.ErrorHandling.Tests/AsyncOption.fs Updates async constructors.
tests/FsToolkit.ErrorHandling.JobResult.Tests/JobResultOption.fs Updates JobResult option constructors.
tests/FsToolkit.ErrorHandling.JobResult.Tests/JobResultCE.fs Updates JobResult CE tests.
tests/FsToolkit.ErrorHandling.JobResult.Tests/JobResult.fs Updates JobResult APIs in tests.
tests/FsToolkit.ErrorHandling.JobResult.Tests/JobOptionCE.fs Updates JobOption CE tests.
tests/FsToolkit.ErrorHandling.JobResult.Tests/JobOption.fs Updates JobOption tests.
tests/FsToolkit.ErrorHandling.JobResult.Tests/FsToolkit.ErrorHandling.JobResult.Tests.fsproj Adds .NET 10 testing. Moderate finding (1 vote): the .NET 10 leg resolves a library whose targets stop at .NET 9.
tests/FsToolkit.ErrorHandling.IcedTasks.Tests/ValueTaskValueOptionCE.fs Updates value-task CE tests.
tests/FsToolkit.ErrorHandling.IcedTasks.Tests/FsToolkit.ErrorHandling.IcedTasks.Tests.fsproj Adds targets and warning configuration. Critical finding (1 vote): retain FS3511 in NoWarn; moderate finding (1 vote): the .NET 10 leg resolves a library whose targets stop at .NET 9.
tests/FsToolkit.ErrorHandling.IcedTasks.Tests/CancellableTaskValidationCE.fs Updates cancellable-task validation constructors.
tests/FsToolkit.ErrorHandling.IcedTasks.Tests/CancellableTaskResultCE.fs Updates cancellable-task result constructors.
tests/FsToolkit.ErrorHandling.AsyncSeq.Tests/FsToolkit.ErrorHandling.AsyncSeq.Tests.fsproj Adds .NET 10 testing. Moderate finding (1 vote): the .NET 10 leg resolves a library whose targets stop at .NET 9.
tests/Directory.Build.props Selects FSharp.Core versions by target framework.
src/FsToolkit.ErrorHandling/TaskValueOption.fs Uses Task.result.
src/FsToolkit.ErrorHandling/TaskValidationCE.fs Uses Task.result.
src/FsToolkit.ErrorHandling/TaskValidation.fs Uses Task.result.
src/FsToolkit.ErrorHandling/TaskResultOption.fs Adds some and compatibility support.
src/FsToolkit.ErrorHandling/TaskResultCE.fs Uses Task.result.
src/FsToolkit.ErrorHandling/TaskResult.fs Adds catchWith and updates task handling.
src/FsToolkit.ErrorHandling/TaskOption.fs Uses Task.result.
src/FsToolkit.ErrorHandling/Task.FSharpCore11.fs Adds older-target Task shims. Critical finding (1 vote): backgroundTask is unavailable on the older FSharp.Core baseline. Critical finding (1 vote): the NET_10_0_OR_GREATER guard is misspelled and includes compatibility implementations in the .NET 10 build.
src/FsToolkit.ErrorHandling/Task.fs Removes or shims overlapping Task APIs. Critical finding (1 vote): the misspelled target guard leaves obsolete Task.singleton enabled on .NET 10.
src/FsToolkit.ErrorHandling/ResultOptionCE.fs Uses ResultOption.some.
src/FsToolkit.ErrorHandling/ResultOption.fs Adds some and compatibility support.
src/FsToolkit.ErrorHandling/Result.fs Conditionally removes overlapping FSharp.Core APIs. Critical finding (1 vote): unqualified map and mapError calls can fail the .NET 10 build, including the occurrence at line 504. Nit (1 vote): the retained valueOr documentation links to removed documentation. Critical finding (1 vote): the misspelled target guard leaves local helpers defined on .NET 10.
src/FsToolkit.ErrorHandling/ParallelAsyncValidationCE.fs Uses Async.result.
src/FsToolkit.ErrorHandling/ParallelAsyncResultCE.fs Uses Async.result.
src/FsToolkit.ErrorHandling/List.fs Uses Async.result.
src/FsToolkit.ErrorHandling/FsToolkit.ErrorHandling.fsproj Adds .NET 10 and shim files.
src/FsToolkit.ErrorHandling/AsyncValidationCE.fs Uses Async.result.
src/FsToolkit.ErrorHandling/AsyncValidation.fs Uses Async.result.
src/FsToolkit.ErrorHandling/AsyncResultOptionCE.fs Uses Async.result and some.
src/FsToolkit.ErrorHandling/AsyncResultOption.fs Adds some and compatibility support.
src/FsToolkit.ErrorHandling/AsyncResultCE.fs Uses Async.result.
src/FsToolkit.ErrorHandling/AsyncResult.fs Adds catchWith and updates async handling.
src/FsToolkit.ErrorHandling/AsyncOptionCE.fs Uses Async.result.
src/FsToolkit.ErrorHandling/AsyncOption.fs Uses Async.result.
src/FsToolkit.ErrorHandling/Async.FSharpCore11.fs Adds older-target Async shims. Critical finding (3 votes): cancellation exceptions are caught instead of rethrown at lines 106 and 130. Critical finding (1 vote): the misspelled target guard includes the shim in the .NET 10 build. Nits (1 vote each): the module summary describes Task computations, and the example uses unavailable Async.RunSynchronouslyImmediate.
src/FsToolkit.ErrorHandling/Async.fs Removes or shims overlapping Async APIs. Critical finding (1 vote): the misspelled target guard leaves obsolete Async.singleton enabled on .NET 10.
src/FsToolkit.ErrorHandling.JobResult/List.fs Uses renamed JobResult APIs.
src/FsToolkit.ErrorHandling.JobResult/JobResultOptionCE.fs Uses some.
src/FsToolkit.ErrorHandling.JobResult/JobResultOption.fs Adds some and compatibility support.
src/FsToolkit.ErrorHandling.JobResult/JobResult.fs Adds ok and catchWith.
src/FsToolkit.ErrorHandling.JobResult/JobOptionCE.fs Uses Job.result.
src/FsToolkit.ErrorHandling.JobResult/JobOption.fs Adds some and none.
src/FsToolkit.ErrorHandling.JobResult/Job.fs Uses Job.result.
src/FsToolkit.ErrorHandling.IcedTasks/CancellableValueTaskResultCE.fs Adds ok and compatibility support.
src/FsToolkit.ErrorHandling.IcedTasks/CancellableTaskValidationCE.fs Adds ok and updates lifting.
src/FsToolkit.ErrorHandling.IcedTasks/CancellableTaskResultCE.fs Adds ok and compatibility support.
src/Directory.Build.props Adds FSharp.Core 11 and asset configuration.
RELEASE_NOTES.md Documents .NET 10 API changes.
playground.fsx Updates API examples.
gitbook/taskValueOption/zip.md Updates task constructor examples.
gitbook/taskValueOption/map.md Updates task constructor examples.
gitbook/taskValueOption/bind.md Updates task constructor examples.
gitbook/taskValueOption/apply.md Updates task constructor examples.
gitbook/taskResult/ofTask.md Updates exception-handling documentation. Nit (2 votes): the link should point to catchWith.md, not the incorrect catch API/page.
gitbook/taskResult/ofCatchTask.md Removes obsolete documentation.
gitbook/taskResult/catchWith.md Adds catchWith documentation. Nit (1 vote): the page is not listed in SUMMARY.md.
gitbook/taskResult/catch.md Documents catch behavior. Moderate finding (1 vote): the signature and examples describe a call that does not match the API.
gitbook/taskOption/zip.md Updates option examples. Moderate finding (3 votes): TaskOption.some None produces an outer Some, not the documented None.
gitbook/taskOption/map.md Updates task examples.
gitbook/taskOption/bind.md Updates task examples.
gitbook/taskOption/apply.md Updates task examples.
gitbook/task/zip.md Updates task examples.
gitbook/task/map.md Updates task examples.
gitbook/task/catch.md Removes obsolete documentation. Nit (1 vote): SUMMARY.md still links to this deleted page.
gitbook/task/apply.md Updates task examples.
gitbook/SUMMARY.md Updates documentation navigation. Nit (2 votes): the TaskResult entry links to catch.md instead of the new catchWith.md.
gitbook/result/others.md Removes valueOr documentation.
gitbook/option/sequenceTask.md Updates task examples.
gitbook/option/sequenceAsync.md Updates async examples.
gitbook/list/sequenceJobResultM.md Updates JobResult examples.
gitbook/list/sequenceJobResultA.md Updates JobResult examples.
gitbook/jobResultOption/map.md Updates JobResult examples.
gitbook/jobResult/zipError.md Updates JobResult examples.
gitbook/jobResult/zip.md Updates JobResult examples.
gitbook/jobResult/ofResult.md Removes obsolete documentation. Nit (1 vote): SUMMARY.md still points to the deleted page.
gitbook/jobResult/catchWith.md Updates catchWith examples. Nit (1 vote): SUMMARY.md points to the missing catch.md.
gitbook/jobOption/map.md Updates Job examples.
gitbook/jobOption/either.md Updates Job examples. Moderate finding (2 votes): the example has an extra closing parenthesis and does not parse.
gitbook/jobOption/apply.md Updates Job examples.
gitbook/job/zip.md Updates Job examples.
gitbook/job/result.md Renames Job documentation.
gitbook/job/apply.md Updates Job examples.
gitbook/cancellableValueTaskResult/zip.md Updates result examples.
gitbook/cancellableValueTaskResult/map.md Updates result examples.
gitbook/cancellableValueTaskResult/apply.md Updates result examples.
gitbook/cancellableValueTaskOption/zip.md Updates option examples.
gitbook/cancellableValueTaskOption/map.md Updates option examples.
gitbook/cancellableValueTaskOption/either.md Updates option examples.
gitbook/cancellableValueTaskOption/bind.md Updates option examples.
gitbook/cancellableValueTaskOption/apply.md Updates option examples.
gitbook/cancellableTaskValidation/orElse.md Updates validation examples.
gitbook/cancellableTaskValidation/ok.md Renames validation documentation.
gitbook/cancellableTaskResult/ok.md Renames result documentation.
gitbook/cancellableTaskOption/zip.md Updates cancellable-task examples. Moderate finding (3 votes): CancellableTaskOption.result is not defined and the example does not compile.
gitbook/cancellableTaskOption/map.md Updates cancellable-task examples.
gitbook/cancellableTaskOption/bind.md Updates cancellable-task examples.
gitbook/cancellableTaskOption/apply.md Updates cancellable-task examples.
gitbook/asyncResult/catchWith.md Updates catchWith examples. Nit (1 vote): SUMMARY.md still links to the missing catch.md.
gitbook/asyncOption/orElseFunctions.md Updates Async option examples.
gitbook/asyncOption/map.md Updates Async option examples.
gitbook/asyncOption/bind.md Updates Async option examples.
gitbook/asyncOption/apply.md Updates Async option examples.
Directory.Build.props Updates language and nullable settings.
build/DotEnv.fs Applies formatting updates.
build/build.fs Updates build scripts.
benchmarks/Benchmarks.fs Updates benchmark constructors.
benchmarks/AsyncResultCE.fs Updates benchmark Async usage.
Review details

Suppressed comments (14)

gitbook/asyncResult/catchWith.md:1

  • This new page is named catchWith, but gitbook/SUMMARY.md still links the AsyncResult entry to the missing asyncResult/catch.md. Update the summary entry so the documented API is reachable.
    gitbook/jobResult/catchWith.md:1
  • This new page is named catchWith, but gitbook/SUMMARY.md still links the JobResult entry to the missing jobResult/catch.md. Update the summary entry so the documented API is reachable.
    gitbook/jobResult/ofResult.md:1
  • Deleting this page leaves gitbook/SUMMARY.md pointing at jobResult/ofResult.md, which makes the published documentation navigation link dead. Update the summary to remove the entry or point it at the replacement page.
    gitbook/task/catch.md:1
  • Deleting this page leaves gitbook/SUMMARY.md pointing at task/catch.md, which makes the published documentation navigation link dead. Update the summary to remove the entry or point it at the replacement API page.
    gitbook/taskResult/catch.md:12
  • The new signature and examples do not match the API: TaskResult.catch is the obsolete two-argument mapper alias in the source, while the one-argument Task<'T> -> Task<Result<'T, exn>> function is Task.catch; custom error mapping is TaskResult.catchWith. This page therefore documents a call that will not compile.
    gitbook/taskResult/catchWith.md:1
  • This catchWith page is not listed in gitbook/SUMMARY.md; the TaskResult navigation only exposes catch.md. Add the new page to the summary so users can discover the API.
    src/FsToolkit.ErrorHandling/Async.FSharpCore11.fs:131
  • This separate catch-all has the same cancellation bug even if catchWith is corrected: a canceled computation is converted to Error instead of remaining canceled. Delegate through the cancellation-preserving catchWith after mapping success to Ok.
    src/FsToolkit.ErrorHandling/Async.FSharpCore11.fs:11
  • The module summary describes Task computations, but this file defines the Async shims. This makes the generated API documentation misleading; describe asynchronous computations instead.
    src/FsToolkit.ErrorHandling/Async.FSharpCore11.fs:24
  • The shim is compiled for pre-net10 targets, but this example invokes Async.RunSynchronouslyImmediate, which is a newer FSharp.Core API and is not provided by this shim. The copied examples therefore do not work for the targets this file supports; use the broadly available Async.RunSynchronously throughout the shim documentation.
    src/FsToolkit.ErrorHandling/Result.fs:504
  • This net10 guard removes defaultValue, while ignoreError still calls defaultValue unqualified at line 558. That leaves the net10 source with an unresolved binding; use Result.defaultValue or keep a local compatibility definition.
    src/FsToolkit.ErrorHandling/Result.fs:678
  • The XML documentation for the retained pre-net10 valueOr function still links to result/others#valueor, but this PR removes that section from gitbook/result/others.md. The generated API docs will contain a dead link; update the link to the replacement defaultWith documentation or remove it.
    tests/FsToolkit.ErrorHandling.AsyncSeq.Tests/FsToolkit.ErrorHandling.AsyncSeq.Tests.fsproj:5
  • This test project now has a net10.0 leg, but its project reference points to a library whose TargetFrameworks stop at net9.0. The net10 test therefore resolves the net9 source asset and does not validate the AsyncSeq package under the intended FSharp.Core 11/net10 target; add a matching net10 library target or remove this misleading test leg.
    tests/FsToolkit.ErrorHandling.IcedTasks.Tests/FsToolkit.ErrorHandling.IcedTasks.Tests.fsproj:5
  • This test project now has a net10.0 leg, but its project reference points to a library whose TargetFrameworks stop at net9.0. The net10 test therefore resolves the net9 source asset and does not validate the IcedTasks package under the intended FSharp.Core 11/net10 target; add a matching net10 library target or remove this misleading test leg.
    tests/FsToolkit.ErrorHandling.JobResult.Tests/FsToolkit.ErrorHandling.JobResult.Tests.fsproj:5
  • This test project now has a net10.0 leg, but its project reference points to a library whose TargetFrameworks stop at net9.0. The net10 test therefore resolves the net9 source asset and does not validate the dependent package under the intended FSharp.Core 11/net10 target; add a matching net10 library target or remove this misleading test leg.
  • Files reviewed: 132/132 changed files
  • Comments generated: 14
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@@ -0,0 +1,195 @@
// NOTE Direct copy of FSharp.Core V11 with the following alterations:
// - namespace is FsToolkit.ErrorHandling instead of Microsoft.FSharp.Control
#if !NET_10_0_OR_GREATER
Comment on lines +102 to +108
let catchWith (handler: exn -> 'T) (computation: Async<'T>) : Async<'T> =
async {
try
return! computation
with e ->
return handler e
}
[<RequireQualifiedAccess>]
module Async =

#if !NET_10_0_OR_GREATER
Comment thread src/FsToolkit.ErrorHandling/Result.fs Outdated
[<RequireQualifiedAccess>]
module Result =

#if !NET_10_0_OR_GREATER
Comment thread src/FsToolkit.ErrorHandling/Result.fs Outdated
[<RequireQualifiedAccess>]
module Result =

#if !NET_10_0_OR_GREATER
```fsharp
let left = CancellableTaskOption.some 123
let right = CancellableTaskOption.singleton None
let right = CancellableTaskOption.result None
|> JobOption.either
(fun user -> Job.singleton (sprintf "Found user: %s" user.Name))
(Job.singleton "User not found")
(fun user -> Job.result $"Found user: {user.Name}"))
Comment thread gitbook/taskOption/zip.md
```fsharp
let left = TaskOption.some 123
let right = TaskOption.singleton None
let right = TaskOption.some None
Comment thread gitbook/SUMMARY.md
* Transforms
* [ofAsync](taskResult/ofAsync.md)
* [ofCatchTask](taskResult/ofCatchTask.md)
* [catch](taskResult/catch.md)
Transforms a `Task<'T>` into a `Task<Result<'T, exn>>` by wrapping the value in `Ok`.

> **Note:** This function does **not** catch exceptions thrown by the task. Any exceptions will propagate as-is. To catch exceptions and map them to the `Error` case, use [`ofCatchTask`](ofCatchTask.md).
> **Note:** This function does **not** catch exceptions thrown by the task. Any exceptions will propagate as-is. To catch exceptions and map them to the `Error` case, use [`catch`](catch.md).
@TheAngryByrd

Copy link
Copy Markdown
Collaborator

adds a net10 TFM build that: references FSharp.Core 11

I think that we should consider going to net11, there may be a need to do net10 with FSharp.Core 10 in the future.

@bartelink

Copy link
Copy Markdown
Contributor Author

I think that we should consider going to net11, there may be a need to do net10 with FSharp.Core 10 in the future.

That was my initial instinct; I only changed tack due to it being a preview SDK and the CI not being rigged for it as yet.

Definitely don't want to release a non-beta release depending on FSharp.Core 11-rc

That said, non-LTS TFM-specific builds have less value for me and should be candidates for trimming (leave net6.0 etc, but remove net9.0, and maybe run the tests under net8.0 (to cover the net8.0 TFM build)).

I'd venture running tests under net9.0 should also removed, i.e. maybe replace the existing net9.0 stuff with net10.0 as part of this release cycle then we pin its API surface via Package Validation (e.g. https://github.com/jet/equinox/blob/master/src/Equinox/Equinox.fsproj#L5).

So maybe:

  1. leave net6.0 + net8 build/test
  2. add package validation for net6 + net10 builds
  3. when we have an RC or final net11 we want to do a real -rc with:
  • provision sdk in CI, update global.json
  • change net10.0 tfm-build to net11.0, test under net11
  • change net9.0 tfm-build to net10.0, test under net10

@bartelink bartelink mentioned this pull request Sep 17, 2026
4 tasks
@bartelink bartelink changed the title FSharp.Core 11 interop/shimming Rebase impl, docs and surface API on FSharp.Core v 11 APIs Sep 17, 2026
@bartelink

Copy link
Copy Markdown
Contributor Author

@TheAngryByrd This one goes after #376 - no point reviewing while the diffs combine both. Will rebase once you merge the other. I have no plans to implement anything else in the context of this API (though maybe RunSynchronouslyImmediate) can be done if I get around to it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants