FsToolkit.ErrorHandling.JobResult 4.16.0

dotnet add package FsToolkit.ErrorHandling.JobResult --version 4.16.0                
NuGet\Install-Package FsToolkit.ErrorHandling.JobResult -Version 4.16.0                
此命令意在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="FsToolkit.ErrorHandling.JobResult" Version="4.16.0" />                
对于支持 PackageReference 的项目,请将此 XML 节点复制到项目文件中以引用此包。
paket add FsToolkit.ErrorHandling.JobResult --version 4.16.0                
#r "nuget: FsToolkit.ErrorHandling.JobResult, 4.16.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将其复制到交互式工具或脚本的源代码中以引用此包。
// Install FsToolkit.ErrorHandling.JobResult as a Cake Addin
#addin nuget:?package=FsToolkit.ErrorHandling.JobResult&version=4.16.0

// Install FsToolkit.ErrorHandling.JobResult as a Cake Tool
#tool nuget:?package=FsToolkit.ErrorHandling.JobResult&version=4.16.0                

FsToolkit.ErrorHandling

FsToolkit.ErrorHandling 是一个实用库,用于在 F# 中使用 Result 类型,并允许您进行清晰的、简单的强大的错误处理。

该库提供了如 mapbindapplytraversesequence 等实用函数,以及计算表达式和前缀运算符,可用于处理 Result<'a, 'b>Result<'a option, 'b>Async<Result<'a, 'b>>Async<Result<'a option, 'b>>Result<'a, 'b list>

灵感来自 Chessie 和 Cvdm.ErrorHandling(后者已合并到 FsToolkit.ErrorHandling)。

FsToolkit.ErrorHandling 针对的是 .NET Standard 2.0 和 .NET Framework 4.6.1,并支持 Fable。

文档

文档可在 此处找到

进一步资料

构建

GitHub Actions
GitHub Actions
Build History

NuGet

包名 发布 预发布
FsToolkit.ErrorHandling NuGet NuGet
FsToolkit.ErrorHandling.TaskResult NuGet NuGet
FsToolkit.ErrorHandling.JobResult NuGet NuGet
FsToolkit.ErrorHandling.AsyncSeq NuGet NuGet
FsToolkit.ErrorHandling.IcedTasks NuGet NuGet

本地开发

Devcontainer

此仓库为VSCode设置了一个devcontainer。更多信息请查看

本地配置

可选

要本地测试fable构建,您需要

  • Node
    • v18.0.0或更高版本
    • 非必需但建议您使用NVM来轻松管理Node的多个版本
  • Python
    • v3.10.0或更高版本
    • Fable-Python需要
编译
> build.cmd <optional buildtarget> // on windows
$ ./build.sh  <optional buildtarget>// on unix

未经指定构建目标,默认目标为DotnetPack,该目标将在dotnet上运行所有项目的测试,然后将项目打包成nuget包。更多显著目标请见下文。

构建目标
  • Clean - 将清理所有项目的binobj文件夹
  • DotnetTest - 将运行dotnet项目的测试
  • NpmTest - 将运行fable-javascript项目的测试
  • PythonTest - 将运行fable-python项目的测试
  • RunTests - 将运行dotnetfable-javascriptfable-python项目的测试
  • FormatCode - 将运行fantomas来格式化代码库

这并非详尽的列表。更多目标可以在./build/build.fs文件中找到。

激励示例

这个组成登录流程的例子展示了这个库如何通过使用计算表达式和少数几个辅助函数来辅助清晰的、简单的、强大的错误处理。 (该库还有更多辅助函数和计算表达式以及中缀运算符;详细信息请参阅文档)

// Given the following functions:
//   tryGetUser: string -> Async<User option>
//   isPwdValid: string -> User -> bool
//   authorize: User -> Async<Result<unit, AuthError>>
//   createAuthToken: User -> Result<AuthToken, TokenError>

type LoginError = InvalidUser | InvalidPwd | Unauthorized of AuthError | TokenErr of TokenError

let login (username: string) (password: string) : Async<Result<AuthToken, LoginError>> =
  asyncResult {
    // requireSome unwraps a Some value or gives the specified error if None
    let! user = username |> tryGetUser |> AsyncResult.requireSome InvalidUser

    // requireTrue gives the specified error if false
    do! user |> isPwdValid password |> Result.requireTrue InvalidPwd

    // Error value is wrapped/transformed (Unauthorized has signature AuthError -> LoginError)
    do! user |> authorize |> AsyncResult.mapError Unauthorized

    // Same as above, but synchronous, so we use the built-in mapError
    return! user |> createAuthToken |> Result.mapError TokenErr
  }

赞助商

<a href="https://www.ajira.tech"><img src="./Ajira-logo.png" alt="Ajira Technologies, India" width="200" /></a>

产品 版本(兼容和附加的计算目标框架版本。)
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 兼容。
.NET Framework net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解有关 目标框架.NET Standard 的更多信息。

NuGet 包

此包不被任何 NuGet 包使用。

GitHub 仓库

此包未被任何流行的 GitHub 仓库使用。

版本 下载 最后更新
4.16.0 77 7/15/2024
4.15.3 67 7/14/2024
4.15.3-beta001 52 7/14/2024
4.15.2 56 5/2/2024
4.15.2-beta001 39 5/2/2024
4.15.1 145 1/15/2024
4.15.0 105 1/10/2024
4.14.0 112 1/2/2024
4.13.0 143 12/10/2023
4.13.0-beta002 89 12/10/2023
4.13.0-beta001 77 12/10/2023
4.12.0 125 11/27/2023
4.11.1 116 11/23/2023
4.11.0 118 11/11/2023
4.10.0 137 10/16/2023
4.9.0 189 7/10/2023
4.8.0 133 7/7/2023
4.7.0 154 6/21/2023
4.7.0-beta001 105 6/21/2023
4.6.0 187 4/20/2023
4.6.0-beta001 108 4/20/2023
4.5.0 210 3/27/2023
4.5.0-beta002 129 3/19/2023
4.5.0-beta001 114 3/6/2023
4.4.0 273 2/21/2023
4.3.0 309 1/20/2023
4.2.1 292 12/19/2022
4.2.0 300 12/17/2022
4.1.0 274 12/13/2022
4.1.0-beta001 118 12/13/2022
4.0.0 353 11/19/2022
4.0.0-beta001 135 11/19/2022
3.3.1 331 11/19/2022
3.3.1-beta004 122 11/19/2022
3.3.1-beta003 136 11/18/2022
3.3.1-beta002 127 11/18/2022
3.3.1-beta001 130 11/18/2022
3.3.0-beta001 144 11/9/2022
3.2.0 368 10/31/2022
3.2.0-beta001 127 10/31/2022
3.1.0 413 10/19/2022
3.0.1 349 10/18/2022
3.0.0 376 10/14/2022
3.0.0-beta008 140 10/14/2022
3.0.0-beta007 163 4/15/2022
3.0.0-beta006 152 4/5/2022
3.0.0-beta005 141 4/5/2022
3.0.0-beta004 140 4/5/2022
3.0.0-beta003 136 3/30/2022
3.0.0-beta002 141 2/21/2022
3.0.0-beta001 140 2/21/2022
2.13.0 533 1/11/2022
2.13.0-beta001 158 1/11/2022
2.12.0 276 1/6/2022
2.12.0-beta001 155 1/6/2022
2.11.1 928 12/1/2021
2.11.1-beta001 759 12/1/2021
2.11.0 3,299 11/24/2021
2.11.0-beta004 3,190 11/24/2021
2.11.0-beta002 3,091 11/24/2021
2.11.0-beta001 2,979 11/24/2021
2.10.0 333 11/13/2021
2.9.0 324 11/10/2021
2.9.0-beta001 191 11/10/2021
2.8.1 374 11/7/2021
2.8.0 366 11/7/2021
2.8.0-beta001 268 11/7/2021
2.7.1 365 10/19/2021
2.7.1-beta001 224 10/19/2021
2.7.0 520 8/2/2021
2.7.0-beta001 230 8/2/2021
2.6.0 338 7/7/2021
2.6.0-beta001 240 7/7/2021
2.5.0 419 5/26/2021
2.5.0-beta001 217 5/26/2021
2.4.0 365 5/23/2021
2.4.0-beta001 228 5/23/2021
2.3.0 330 5/14/2021
2.3.0-beta002 223 5/14/2021
2.2.0 356 4/21/2021
2.1.2 403 2/27/2021
2.1.1 362 2/26/2021
2.1.1-beta001 218 2/26/2021
2.1.0 419 2/26/2021
2.1.0-beta003 292 2/26/2021
2.1.0-beta002 252 2/25/2021
2.1.0-beta001 244 2/25/2021
2.0.0 748 11/20/2020
2.0.0-beta002 366 11/18/2020
2.0.0-beta001 353 8/29/2020
1.4.3 807 7/22/2020
1.4.0 574 6/5/2020
1.3.2 540 6/5/2020
1.3.1 560 5/29/2020
1.3.1-beta001 390 5/25/2020
1.3.0 569 5/25/2020
1.3.0-beta006 385 5/25/2020
1.3.0-beta005 426 5/25/2020
1.3.0-beta004 368 5/12/2020
1.2.6 631 2/15/2020
1.2.5 631 10/18/2019
1.2.4 555 10/10/2019
1.2.3 683 7/22/2019
1.2.2 636 5/31/2019
1.2.1 638 5/22/2019

- [添加 Task.ignore](https://github.com/demystifyfp/FsToolkit.ErrorHandling/pull/272) 致谢 @odytrice