FsToolkit.ErrorHandling.IcedTasks 4.16.0
dotnet add package FsToolkit.ErrorHandling.IcedTasks --version 4.16.0
NuGet\Install-Package FsToolkit.ErrorHandling.IcedTasks -Version 4.16.0
<PackageReference Include="FsToolkit.ErrorHandling.IcedTasks" Version="4.16.0" />
paket add FsToolkit.ErrorHandling.IcedTasks --version 4.16.0
#r "nuget: FsToolkit.ErrorHandling.IcedTasks, 4.16.0"
// Install FsToolkit.ErrorHandling.IcedTasks as a Cake Addin #addin nuget:?package=FsToolkit.ErrorHandling.IcedTasks&version=4.16.0 // Install FsToolkit.ErrorHandling.IcedTasks as a Cake Tool #tool nuget:?package=FsToolkit.ErrorHandling.IcedTasks&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
构建
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 | netcoreapp3.0 已计算。 netcoreapp3.1 已计算。 |
.NET Standard | netstandard2.1 兼容。 |
MonoAndroid | monoandroid 已计算。 |
MonoMac | monomac 已计算。 |
MonoTouch | monotouch 已计算。 |
Tizen | tizen60 已计算。 |
Xamarin.iOS | xamarinios 已计算。 |
Xamarin.Mac | xamarinmac 已计算。 |
Xamarin.TVOS | xamarintvos 已计算。 |
Xamarin.WatchOS | xamarinwatchos 已计算。 |
-
.NETStandard 2.1
- FSharp.Core (>= 7.0.300)
- FsToolkit.ErrorHandling.TaskResult (>= 4.16.0)
- IcedTasks (>= 0.7.0)
NuGet包
此包未由任何NuGet包使用。
GitHub仓库
此包未由任何流行的GitHub仓库使用。
版本 | 下载 | 最后更新 |
---|---|---|
4.16.0 | 265 | 7/15/2024 |
4.15.3 | 76 | 7/14/2024 |
4.15.3-beta001 | 60 | 7/14/2024 |
4.15.2 | 496 | 5/2/2024 |
4.15.2-beta001 | 45 | 5/2/2024 |
4.15.1 | 146 | 1/15/2024 |
4.15.0 | 103 | 1/10/2024 |
4.14.0 | 120 | 1/2/2024 |
4.13.0 | 140 | 12/10/2023 |
4.13.0-beta002 | 89 | 12/10/2023 |
4.13.0-beta001 | 90 | 12/10/2023 |
4.12.0 | 135 | 11/27/2023 |
4.11.1 | 129 | 11/23/2023 |
4.11.0 | 108 | 11/11/2023 |
4.10.0 | 122 | 10/16/2023 |
4.9.0 | 162 | 7/10/2023 |
4.8.0 | 122 | 7/7/2023 |
4.7.0 | 122 | 6/21/2023 |
4.7.0-beta001 | 106 | 6/21/2023 |
4.6.0 | 159 | 4/20/2023 |
4.6.0-beta001 | 105 | 4/20/2023 |
4.5.0 | 211 | 3/27/2023 |
4.5.0-beta002 | 123 | 3/19/2023 |
4.5.0-beta001 | 111 | 3/6/2023 |
4.4.0 | 220 | 2/21/2023 |
4.3.0 | 291 | 1/20/2023 |
4.2.1 | 333 | 12/19/2022 |
4.2.0 | 323 | 12/17/2022 |
4.1.0 | 264 | 12/13/2022 |
4.1.0-beta001 | 120 | 12/13/2022 |
4.0.0 | 311 | 11/19/2022 |
4.0.0-beta001 | 138 | 11/19/2022 |
3.3.1 | 303 | 11/19/2022 |
3.3.1-beta004 | 122 | 11/19/2022 |
3.3.1-beta003 | 121 | 11/18/2022 |
3.3.1-beta002 | 121 | 11/18/2022 |
3.3.1-beta001 | 120 | 11/18/2022 |
3.3.0-beta001 | 140 | 11/9/2022 |
3.2.0 | 332 | 10/31/2022 |
3.2.0-beta001 | 128 | 10/31/2022 |
3.1.0 | 394 | 10/19/2022 |
3.0.1 | 351 | 10/18/2022 |
3.0.0 | 376 | 10/14/2022 |
3.0.0-beta008 | 137 | 10/14/2022 |
3.0.0-beta007 | 154 | 4/15/2022 |
3.0.0-beta006 | 138 | 4/5/2022 |
3.0.0-beta005 | 138 | 4/5/2022 |
3.0.0-beta004 | 133 | 4/5/2022 |
- [添加Task.ignore](https://github.com/demystifyfp/FsToolkit.ErrorHandling/pull/272) 贡献者 @odytrice