FsToolkit.ErrorHandling.TaskResult 4.16.0
dotnet add package FsToolkit.ErrorHandling.TaskResult --version 4.16.0
NuGet\Install-Package FsToolkit.ErrorHandling.TaskResult -Version 4.16.0
<PackageReference Include="FsToolkit.ErrorHandling.TaskResult" Version="4.16.0" />
paket add FsToolkit.ErrorHandling.TaskResult --version 4.16.0
#r "nuget: FsToolkit.ErrorHandling.TaskResult, 4.16.0"
// Install FsToolkit.ErrorHandling.TaskResult as a Cake Addin #addin nuget:?package=FsToolkit.ErrorHandling.TaskResult&version=4.16.0 // Install FsToolkit.ErrorHandling.TaskResult as a Cake Tool #tool nuget:?package=FsToolkit.ErrorHandling.TaskResult&version=4.16.0
FsToolkit.ErrorHandling
FsToolkit.ErrorHandling 是一个用于在 F# 中工作与 Result
类型的实用库,并允许您进行清晰、简单和强大的错误处理。
该库提供如 map
、bind
、apply
、traverse
、sequence
等辅助函数,以及用于操作 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。
文档
文档在此处 提供。
其他资料
- 学习这种编程风格的主要资源是 面向铁路的编程
- 然而,Result 并非万能药,请参见其潜在陷阱和情况,您不应使用
Result
。 为异常辩护:抛弃你的 Result
构建
GitHub Actions |
---|
NuGet
包名 | 发布 | 预发布 |
---|---|---|
FsToolkit.ErrorHandling | ||
FsToolkit.ErrorHandling.TaskResult | ||
FsToolkit.ErrorHandling.JobResult | ||
FsToolkit.ErrorHandling.AsyncSeq | ||
FsToolkit.ErrorHandling.IcedTasks |
本地开发
Devcontainer
本仓库为VSCode配置了devcontainer。更多详细信息请参见
本地设置
可选
为了在本地上测试fable构建,您需要
编译
> build.cmd <optional buildtarget> // on windows
$ ./build.sh <optional buildtarget>// on unix
未经指定构建目标,默认目标为DotnetPack
,它将在dotnet上运行所有项目的测试,然后将项目打包成nuget包。有关其他显著的目标,请参阅以下内容。
构建目标
Clean
- 将清理所有项目的bin
和obj
文件夹DotnetTest
- 将运行dotnet
项目的测试NpmTest
- 将运行fable-javascript
项目的测试PythonTest
- 将运行fable-python
项目的测试RunTests
- 将运行dotnet
、fable-javascript
和fable-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-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 已计算。 |
-
.NETStandard 2.0
- FsToolkit.ErrorHandling (≥ 4.16.0)
- Ply (≥ 0.3.1)
-
.NETStandard 2.1
- FsToolkit.ErrorHandling (≥ 4.16.0)
NuGet 包 (7)
显示依赖 FsToolkit.ErrorHandling.TaskResult 的前 5 个 NuGet 包
包 | 下载 |
---|---|
NBomber
适用于 Pull 和 Push 场景的现代化且灵活的负载测试框架,旨在测试任何系统,无论协议(HTTP/ WebSocket/AMQP 等)或语义模型(Pull/Push)。 |
|
FsToolkit.ErrorHandling.JobResult
FsToolkit.ErrorHandling 是一个基于 F# Result 类型的实用程序库,使错误处理保持一致且功能强大。 |
|
FsToolkit.ErrorHandling.IcedTasks
FsToolkit.ErrorHandling 是一个基于 F# Result 类型的实用程序库,使错误处理保持一致且功能强大。 |
|
TinyEventStore
TinyEventStore 做的事! |
|
p1eXu5.FSharp.Ports.PortTaskResult
PortTaskResult 计算表达式。 |
GitHub 仓库
此包不被任何流行的 GitHub 仓库使用。
版本 | 下载 | 最后更新 |
---|---|---|
4.16.0 | 3,025 | 7/15/2024 |
4.15.3 | 626 | 7/14/2024 |
4.15.3-beta001 | 81 | 7/14/2024 |
4.15.2 | 26,796 | 5/2/2024 |
4.15.2-beta001 | 96 | 5/2/2024 |
4.15.1 | 46,005 | 1/15/2024 |
4.15.0 | 27,234 | 1/10/2024 |
4.14.0 | 2,782 | 1/2/2024 |
4.13.0 | 4,757 | 12/10/2023 |
4.13.0-beta002 | 799 | 12/10/2023 |
4.13.0-beta001 | 831 | 12/10/2023 |
4.12.0 | 3,708 | 11/27/2023 |
4.11.1 | 3,206 | 11/23/2023 |
4.11.0 | 11,021 | 11/11/2023 |
4.10.0 | 9,967 | 10/16/2023 |
4.9.0 | 330,122 | 7/10/2023 |
4.8.0 | 2,348 | 7/7/2023 |
4.7.0 | 7,857 | 6/21/2023 |
4.7.0-beta001 | 1,160 | 6/21/2023 |
4.6.0 | 29,192 | 4/20/2023 |
4.6.0-beta001 | 1,226 | 4/20/2023 |
4.5.0 | 9,001 | 3/27/2023 |
4.5.0-beta002 | 1,264 | 3/19/2023 |
4.5.0-beta001 | 2,041 | 3/6/2023 |
4.4.0 | 83,786 | 2/21/2023 |
4.3.0 | 14,877 | 1/20/2023 |
4.2.1 | 11,804 | 12/19/2022 |
4.2.0 | 1,731 | 12/17/2022 |
4.1.0 | 3,155 | 12/13/2022 |
4.1.0-beta001 | 1,237 | 12/13/2022 |
4.0.0 | 31,786 | 11/19/2022 |
4.0.0-beta001 | 1,145 | 11/19/2022 |
3.3.1 | 50,056 | 11/19/2022 |
3.3.1-beta004 | 1,177 | 11/19/2022 |
3.3.1-beta003 | 1,177 | 11/18/2022 |
3.3.1-beta002 | 1,230 | 11/18/2022 |
3.3.1-beta001 | 1,134 | 11/18/2022 |
3.3.0-beta001 | 1,209 | 11/9/2022 |
3.2.0 | 89,907 | 10/31/2022 |
3.2.0-beta001 | 1,144 | 10/31/2022 |
3.1.0 | 17,643 | 10/19/2022 |
3.0.1 | 2,411 | 10/18/2022 |
3.0.0 | 4,919 | 10/14/2022 |
3.0.0-beta008 | 1,222 | 10/14/2022 |
3.0.0-beta007 | 29,305 | 4/15/2022 |
3.0.0-beta006 | 1,212 | 4/5/2022 |
3.0.0-beta005 | 1,249 | 4/5/2022 |
3.0.0-beta004 | 1,292 | 4/5/2022 |
3.0.0-beta003 | 1,235 | 3/30/2022 |
3.0.0-beta002 | 1,215 | 2/21/2022 |
3.0.0-beta001 | 1,228 | 2/21/2022 |
2.13.0 | 951,277 | 1/11/2022 |
2.13.0-beta001 | 1,180 | 1/11/2022 |
2.12.0 | 2,277 | 1/6/2022 |
2.12.0-beta001 | 1,133 | 1/6/2022 |
2.11.1 | 18,322 | 12/1/2021 |
2.11.1-beta001 | 1,761 | 12/1/2021 |
2.11.0 | 5,100 | 11/24/2021 |
2.11.0-beta004 | 4,175 | 11/24/2021 |
2.11.0-beta002 | 4,032 | 11/24/2021 |
2.11.0-beta001 | 3,927 | 11/24/2021 |
2.10.0 | 14,627 | 11/13/2021 |
2.9.0 | 2,335 | 11/10/2021 |
2.9.0-beta001 | 1,246 | 11/10/2021 |
2.8.1 | 1,692 | 11/7/2021 |
2.8.0 | 1,567 | 11/7/2021 |
2.8.0-beta001 | 1,361 | 11/7/2021 |
2.7.1 | 3,202 | 10/19/2021 |
2.7.1-beta001 | 1,278 | 10/19/2021 |
2.7.0 | 13,520 | 8/2/2021 |
2.7.0-测试版001 | 1,309 | 8/2/2021 |
2.6.0 | 3,905 | 7/7/2021 |
2.6.0-测试版001 | 1,261 | 7/7/2021 |
2.5.0 | 13,908 | 5/26/2021 |
2.5.0-测试版001 | 1,387 | 5/26/2021 |
2.4.0 | 1,824 | 5/23/2021 |
2.4.0-测试版001 | 1,289 | 5/23/2021 |
2.3.0 | 3,390 | 5/14/2021 |
2.3.0-测试版002 | 1,263 | 5/14/2021 |
2.2.0 | 11,568 | 4/21/2021 |
2.1.2 | 28,254 | 2/27/2021 |
2.1.1 | 1,635 | 2/26/2021 |
2.1.1-测试版001 | 1,350 | 2/26/2021 |
2.1.0 | 1,733 | 2/26/2021 |
2.1.0-测试版003 | 1,427 | 2/26/2021 |
2.1.0-测试版002 | 1,354 | 2/25/2021 |
2.1.0-测试版001 | 1,431 | 2/25/2021 |
2.0.0 | 543,276 | 11/20/2020 |
2.0.0-测试版002 | 1,544 | 11/18/2020 |
2.0.0-测试版001 | 1,606 | 8/29/2020 |
1.4.3 | 215,035 | 7/22/2020 |
1.4.0 | 5,248 | 6/5/2020 |
1.3.2 | 1,967 | 6/5/2020 |
1.3.1 | 2,850 | 5/29/2020 |
1.3.1-测试版001 | 1,617 | 5/25/2020 |
1.3.0 | 3,382 | 5/25/2020 |
1.3.0-测试版006 | 1,596 | 5/25/2020 |
1.3.0-测试版005 | 1,659 | 5/25/2020 |
1.3.0-测试版004 | 1,485 | 5/12/2020 |
1.2.6 | 23,131 | 2/15/2020 |
1.2.5 | 17,391 | 10/18/2019 |
1.2.4 | 2,006 | 10/10/2019 |
1.2.3 | 2,994 | 7/22/2019 |
1.2.2 | 2,217 | 5/31/2019 |
1.2.1 | 2,016 | 5/22/2019 |
1.1.1 | 1,733 | 5/9/2019 |
1.1.0 | 1,943 | 5/7/2019 |
- [添加Task.ignore](https://github.com/demystifyfp/FsToolkit.ErrorHandling/pull/272) 致谢 @odytrice