FsToolkit.ErrorHandling icon indicating copy to clipboard operation
FsToolkit.ErrorHandling copied to clipboard

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

Open isaacabraham opened this issue 3 years ago • 10 comments

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

isaacabraham avatar Apr 14 '22 17:04 isaacabraham

I listed some hurdles in regards to this in: https://github.com/demystifyfp/FsToolkit.ErrorHandling/issues/142#issue-1032863148

  • 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)

TheAngryByrd avatar Apr 14 '22 17:04 TheAngryByrd

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.

TheAngryByrd avatar Apr 14 '22 17:04 TheAngryByrd

I may revisit this for 4.0 but closing for now.

TheAngryByrd avatar Oct 05 '22 20:10 TheAngryByrd

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.

TheAngryByrd avatar Feb 04 '24 17:02 TheAngryByrd

First off: I am in favor of setting .NET 6 as the minimum target runtime. :tada:

As for collapsing the libraries... I can´t think of a technical way to prevent weird dependency mish-mashes :slightly_frowning_face: But I still think it's a reasonable idea.

pblasucci avatar Feb 04 '24 17:02 pblasucci

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.

TheAngryByrd avatar Feb 04 '24 17:02 TheAngryByrd

Aaahhh... I see. That's actually more reasonable. 👍

pblasucci avatar Feb 04 '24 18:02 pblasucci

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.

l3m avatar Feb 04 '24 19:02 l3m

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

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

siwatanejo avatar Feb 05 '24 08:02 siwatanejo