我需要提供一个带有None结果的解释性消息,所以基本上我希望我能够做到这样的事情:
let func x y z = if x y then Some(z) else None("It didn't work out, because blah blah blah")
这是否有标准类型?
如果不是,我可以为自己的类型使用相同的Some和None名称吗?
更新:
我尝试创建自己的联盟:
type CanBe<'a> =
| Some of 'a
| None of string
似乎有效,不是吗?
答案 0 :(得分:7)
正如Jon Purdy所说,有一种类型可以用来做这件事,但你会更好地使用一些更具体的东西。幸运的是,实施起来相当简单:
type Result<'a> =
| Success of 'a
| Failure of string
let func x y z =
if x y then Success(z)
else Failure("It didn't work out, because blah blah blah")
答案 1 :(得分:5)
Microsoft.FSharp.Core
中的Choice
类型系列:
type Choice<'T1,'T2> =
| Choice1Of2 of 'T1
| Choice2Of2 of 'T2
传统上Choice2Of2
表示失败(如Haskell中的Left
)和Choice1Of2
成功 - 比较Haskell的Right
。但是,这些名称非常通用,您也可以自己创建成功/失败类型。