FsToolkit.ErrorHandling 4.16.0
dotnet add package FsToolkit.ErrorHandling --version 4.16.0
NuGet\Install-Package FsToolkit.ErrorHandling -Version 4.16.0
<PackageReference Include="FsToolkit.ErrorHandling" Version="4.16.0" />
paket add FsToolkit.ErrorHandling --version 4.16.0
#r "nuget: FsToolkit.ErrorHandling, 4.16.0"
// Install FsToolkit.ErrorHandling as a Cake Addin #addin nuget:?package=FsToolkit.ErrorHandling&version=4.16.0 // Install FsToolkit.ErrorHandling as a Cake Tool #tool nuget:?package=FsToolkit.ErrorHandling&version=4.16.0
Fs Toolkit.ErrorHandling
Fs Toolkit.ErrorHandling 是一个实用程序库,用于在 F# 中处理 Result
类型,并允许你进行清晰、简单和强大的错误处理。
该库提供了如 map
、bind
、apply
、traverse
、sequence
等实用函数,以及用于处理 Result &'a, 'b>
、Result &'a option, 'b>
、Async
Async
Result <'a, 'b list>
的计算表达式和运算符。
它受到 Chessie 和 Cvdm.ErrorHandling(后者已合并到 FsToolkit.ErrorHandling)的启发。
Fs Toolkit.ErrorHandling 针对.NET Standard 2.0 和 .NET Framework 4.6.1,并支持 Fable。
文档
文档可在 此处查看。
其他材料
- 了解这种编程风格的主要资源为 铁路面向编程。
- 但是,Result 并非万能的,请参阅结果可能引起的问题和不应使用
Result
的情况。 为异常辩护:抛弃你的 Result。
版本控制
GitHub Actions |
---|
NuGet
包名 | 发布 | 预发布 |
---|---|---|
Fs Toolkit.ErrorHandling | ||
Fs Toolkit.ErrorHandling.TaskResult | ||
Fs Toolkit.ErrorHandling.JobResult | ||
Fs Toolkit.ErrorHandling.AsyncSeq | ||
Fs Toolkit.ErrorHandling.IcedTasks |
本地开发
DevContainer
此存储库已为 VSCode 设置了 devcontainer。有关更多信息,请参阅
本地配置
可选
要在本地测试Fable构建,您需要:
编译
> build.cmd <optional buildtarget> // on windows
$ ./build.sh <optional buildtarget>// on unix
如果没有指定构建目标,默认目标是DotnetPack
,将运行所有项目的dotnet测试,然后将项目打包成nuget包。更多信息请参考以下内容。
构建目标
清洁
- 将清理所有项目的bin
和obj
文件夹DotnetTest
- 将运行dotnet
项目的测试NpmTest
- 将运行fable-javascript
项目的测试PythonTest
- 将运行fable-python
项目的测试RunTests
- 将运行dotnet
、fable-javascript
和项目的测试
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 标准化 | netstandard2.0 兼容。 netstandard2.1 兼容。 |
.NET 框架 | 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
- FSharp.Core (>= 4.7.2)
-
.NETStandard 2.1
- FSharp.Core (>= 7.0.300)
NuGet 包 (31)
显示依赖 FsToolkit.ErrorHandling 的前 5 个 NuGet 包
包 | 下载 |
---|---|
Fs Toolkit.ErrorHandling.TaskResult
FsToolkit.ErrorHandling 是一个基于 F# Result 类型的丰富实用程序库,使错误处理保持一致且功能强大。 |
|
Oryx
.NET SDK 用于编写 HTTP 客户端 |
|
Fs Toolkit.ErrorHandling.AsyncSeq
FsToolkit.ErrorHandling 是一个基于 F# Result 类型的丰富实用程序库,使错误处理保持一致且功能强大。 |
|
WldMr.Excel.Functions
使用 ExcelDna 和 F# 编写的通用 Excel 函数。主要与数组和相关字符串操作。 |
|
Sharpino
简单的 F# 事件源库 |
GitHub 存储库
此包没有被任何流行的 GitHub 存储库使用。
版本 | 下载 | 最后更新 |
---|---|---|
4.16.0 | 7,152 | 7/15/2024 |
4.15.3 | 866 | 7/14/2024 |
4.15.3-beta001 | 123 | 7/14/2024 |
4.15.2 | 40,292 | 5/2/2024 |
4.15.2-beta001 | 144 | 5/2/2024 |
4.15.1 | 98,264 | 1/15/2024 |
4.15.0 | 32,955 | 1/10/2024 |
4.14.0 | 4,624 | 1/2/2024 |
4.13.0 | 9,301 | 12/10/2023 |
4.13.0-beta002 | 1,176 | 12/10/2023 |
4.13.0-beta001 | 1,119 | 12/10/2023 |
4.12.0 | 9,859 | 11/27/2023 |
4.11.1 | 3,995 | 11/23/2023 |
4.11.0 | 21,497 | 11/11/2023 |
4.10.0 | 16,409 | 10/16/2023 |
4.9.0 | 354,389 | 7/10/2023 |
4.8.0 | 3,165 | 7/7/2023 |
4.7.0 | 15,691 | 6/21/2023 |
4.7.0-beta001 | 1,658 | 6/21/2023 |
4.6.0 | 72,826 | 4/20/2023 |
4.6.0-beta001 | 1,736 | 4/20/2023 |
4.5.0 | 32,192 | 3/27/2023 |
4.5.0-beta002 | 1,730 | 3/19/2023 |
4.5.0-beta001 | 3,164 | 3/6/2023 |
4.4.0 | 144,370 | 2/21/2023 |
4.3.0 | 53,069 | 1/20/2023 |
4.2.1 | 20,467 | 12/19/2022 |
4.2.0 | 2,546 | 12/17/2022 |
4.1.0 | 10,460 | 12/13/2022 |
4.1.0-beta001 | 1,661 | 12/13/2022 |
4.0.0 | 37,653 | 11/19/2022 |
4.0.0-beta001 | 1,625 | 11/19/2022 |
3.3.1 | 56,521 | 11/19/2022 |
3.3.1-beta004 | 1,734 | 11/19/2022 |
3.3.1-beta003 | 1,647 | 11/18/2022 |
3.3.1-beta002 | 1,716 | 11/18/2022 |
3.3.1-beta001 | 1,630 | 11/18/2022 |
3.3.0-beta001 | 1,652 | 11/9/2022 |
3.2.0 | 122,700 | 10/31/2022 |
3.2.0-beta001 | 1,531 | 10/31/2022 |
3.1.0 | 23,505 | 10/19/2022 |
3.0.1 | 3,569 | 10/18/2022 |
3.0.0 | 8,055 | 10/14/2022 |
3.0.0-beta008 | 1,705 | 10/14/2022 |
3.0.0-beta007 | 32,218 | 4/15/2022 |
3.0.0-beta006 | 1,732 | 4/5/2022 |
3.0.0-beta005 | 1,762 | 4/5/2022 |
3.0.0-beta004 | 1,793 | 4/5/2022 |
3.0.0-beta003 | 1,727 | 3/30/2022 |
3.0.0-beta002 | 2,421 | 2/21/2022 |
3.0.0-beta001 | 1,712 | 2/21/2022 |
2.13.0 | 1,147,589 | 1/11/2022 |
2.13.0-beta001 | 1,675 | 1/11/2022 |
2.12.0 | 4,050 | 1/6/2022 |
2.12.0-beta001 | 1,675 | 1/6/2022 |
2.11.1 | 36,468 | 12/1/2021 |
2.11.1-beta001 | 2,266 | 12/1/2021 |
2.11.0 | 9,372 | 11/24/2021 |
2.11.0-beta004 | 4,750 | 11/24/2021 |
2.11.0-beta002 | 4,644 | 11/24/2021 |
2.11.0-beta001 | 4,581 | 11/24/2021 |
2.10.0 | 37,222 | 11/13/2021 |
2.9.0 | 7,934 | 11/10/2021 |
2.9.0-beta001 | 1,771 | 11/10/2021 |
2.8.1 | 6,397 | 11/7/2021 |
2.8.0 | 2,276 | 11/7/2021 |
2.8.0-beta001 | 1,963 | 11/7/2021 |
2.7.1 | 10,507 | 10/19/2021 |
2.7.1-beta001 | 1,827 | 10/19/2021 |
2.7.0 | 149,732 | 8/2/2021 |
2.7.0-beta001 | 1,923 | 8/2/2021 |
2.6.0 | 47,566 | 7/7/2021 |
2.6.0-beta001 | 1,897 | 7/7/2021 |
2.5.0 | 61,134 | 5/26/2021 |
2.5.0-beta001 | 1,974 | 5/26/2021 |
2.4.0 | 10,049 | 5/23/2021 |
2.4.0-beta001 | 1,875 | 5/23/2021 |
2.3.0 | 21,200 | 5/14/2021 |
2.3.0-beta002 | 1,808 | 5/14/2021 |
2.2.0 | 15,205 | 4/21/2021 |
2.1.2 | 84,334 | 2/27/2021 |
2.1.1 | 3,003 | 2/26/2021 |
2.1.1-beta001 | 1,914 | 2/26/2021 |
2.1.0 | 2,428 | 2/26/2021 |
2.1.0-beta003 | 2,007 | 2/26/2021 |
2.1.0-beta002 | 1,792 | 2/25/2021 |
2.1.0-beta001 | 1,958 | 2/25/2021 |
2.0.0 | 562,878 | 11/20/2020 |
2.0.0-beta002 | 2,129 | 11/18/2020 |
2.0.0-beta001 | 2,532 | 8/29/2020 |
1.4.3 | 243,120 | 7/22/2020 |
1.4.0 | 9,519 | 6/5/2020 |
1.3.2 | 2,658 | 6/5/2020 |
1.3.1 | 4,650 | 5/29/2020 |
1.3.1-beta001 | 2,207 | 5/25/2020 |
1.3.0 | 4,689 | 5/25/2020 |
1.3.0-beta006 | 2,135 | 5/25/2020 |
1.3.0-beta005 | 2,230 | 5/25/2020 |
1.3.0-beta004 | 2,214 | 5/12/2020 |
1.2.6 | 36,742 | 2/15/2020 |
1.2.5 | 30,126 | 10/18/2019 |
1.2.4 | 3,139 | 10/10/2019 |
1.2.3 | 108,624 | 7/22/2019 |
1.2.2 | 6,843 | 5/31/2019 |
1.2.1 | 28,058 | 5/22/2019 |
1.1.1 | 3,002 | 5/9/2019 |
1.1.0 | 2,723 | 5/7/2019 |
1.0.0 | 5,219 | 4/10/2019 |
0.0.14 | 2,756 | 1/27/2019 |
0.0.13 | 1,417 | 1/21/2019 |
0.0.12 | 1,772 | 1/4/2019 |
0.0.11 | 1,485 | 1/3/2019 |
0.0.10 | 1,440 | 12/30/2018 |
0.0.9 | 1,649 | 10/5/2018 |
0.0.8 | 1,550 | 10/5/2018 |
0.0.7 | 1,571 | 10/5/2018 |
0.0.6 | 1,504 | 10/4/2018 |
0.0.5 | 1,472 | 9/16/2018 |
0.0.4 | 1,504 | 9/16/2018 |
0.0.3 | 1,536 | 9/8/2018 |
0.0.2 | 1,536 | 9/8/2018 |
0.0.1 | 1,774 | 9/8/2018 |
- [添加 Task.ignore](https://github.com/demystifyfp/FsToolkit.ErrorHandling/pull/272) 感谢 @odytrice