demystifyfp/FsToolkit.ErrorHandling

Move TaskResult (and friends) to core FsToolkit.ErrorHandling package

isaacabraham opened this issue Β· 10 comments

I think the core FsToolkit.ErrorHandling package should include the TaskResult CE etc. by default and use the FSharp.Core task { } block.

I listed some hurdles in regards to this in: #142 (comment)

  • I was able to address the F# 6.0 concern by creating separate packages for netstandard2.0 and netstandard2.1.
  • I didn't want to deal with all the Fable concerns (unless they have shims for task now)

use the FSharp.Core task { } block

If you mean by trying to recreate TaskResult in terms of task CE, unfortunately that isn't possible. taskResult (and friends) need their own Resumable Code to work correctly.

I may revisit this for 4.0 but closing for now.

for v5 of FsToolkit.ErrorHandling i'm removing Ply as a dependency and requiring F# 6 Core as a minimum. Because of that, I'm re-evaluating moving all the task code into the core package.

However I'm concerned with what the migration would look like. How will I be able to prevent someone from having v5 of FsToolkit.ErrorHandling and v4 of FsToolkit.ErrorHandling.TaskResult?

Trying to weight the options because no matter how loud you are in the release notes or social media, someones not gonna read the memo.

First off: I am in favor of setting .NET 6 as the minimum target runtime. πŸŽ‰

As for collapsing the libraries... I canΒ΄t think of a technical way to prevent weird dependency mish-mashes πŸ™ But I still think it's a reasonable idea.

I am in favor of setting .NET 6 as the minimum target runtime. πŸŽ‰

To clarify, that is not what I'm doing (I know this gets confusing). I'm setting the minimum to be F# Core 6 (when tasks were introduced) and still be on netstandard2.0/netstandard2.1. There isn't a compelling reason for this library to move to net6 unless someone really wants PoolingValueTask support.

Aaahhh... I see. That's actually more reasonable. πŸ‘

l3m commented

However I'm concerned with what the migration would look like. How will I be able to prevent someone from having v5 of FsToolkit.ErrorHandling and v4 of FsToolkit.ErrorHandling.TaskResult?

Trying to weight the options because no matter how loud you are in the release notes or social media, someones not gonna read the memo.

That true, unfortunately. Despite that, it seems like a good idea and I personally would prefer an integration of TaskResult into the main package.

by default and use the FSharp.Core task { } block.

What's wrong with async{} blocks? They are actually more idiomatic F#.