如何从Discriminated Union案例中为联合案例分配类型?
代码:
type ValidationResult<'Result> =
| Success of 'Result
| Failure of 'Result
type ValidationError =
| Error1 of Failure
| Error2 of Failure
错误:
未定义“失败”类型
答案 0 :(得分:7)
你做不到。受歧视的联合案例本身并不是类型 - 将它们视为返回DU类型值的构造函数。因此,在您的情况下,Success
和Failure
都是创建ValidationResult<'a>
的方法。
因此你需要做这样的事情,这显然没有多大意义:
type ValidationError<'a> =
| Error1 of ValidationResult<'a>
| Error2 of ValidationResult<'a>
这可能更接近你想要做的事情:
type ValidationError =
| Error1
| Error2
type ValidationResult<'Result> =
| Success of 'Result
| Failure of 'Result * ValidationError
答案 1 :(得分:2)
您不能:Failure
不是类型。它被编译为一个.NET类,但你不能从F#访问这个类,它只是一个实现细节。
正常的解决方法是创建与案例相对应的实际类型。在你的情况下,它将是
type Failure<'Result> = 'Result
type ValidationResult<'Result> =
| Success of 'Result
| Failure of Failure<'Result>
type ValidationError =
| Error1 of Failure<???>
| Error2 of Failure<???>