3

我需要提供一条带有 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

它似乎有效,不是吗?

4

2 回答 2

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")
于 2013-09-07T04:21:47.747 回答
5

中的Choice类型族Microsoft.FSharp.Core

type Choice<'T1,'T2> =
| Choice1Of2 of 'T1
| Choice2Of2 of 'T2

通常Choice2Of2表示失败(如Left在 Haskell 中)和Choice1Of2成功 - 比较 Haskell 的Right. 但是,这些名称非常通用,您也可以创建自己的成功/失败类型。

于 2013-09-07T04:37:38.323 回答