【发布时间】:2021-10-24 10:20:55
【问题描述】:
我目前正在尝试在我的 F# 程序中实现一些验证,但我遇到了一些我无法解决的编译时错误。 沸腾了,我正在努力做到这一点
let ifFalseThenError x errorMessage = function
| true -> Ok x
| false -> Error errorMessage
let val1 (initialeSandssynligheder : float[]) =
initialeSandssynligheder
|> Seq.sum
|> (fun x -> x < 2)
|> (fun x -> ifFalseThenError initialeSandssynligheder "Some error")
let val2 initialeSandssynligheder =
initialeSandssynligheder
|> Array.exists ((<) 0.0)
|> (fun x -> ifFalseThenError initialeSandssynligheder "SomeOtherError")
let beregnAlleOvergangssandsynligheder (initialeSandssynligheder: float[]) : float[] =
let initialeSandssynligheder = [|1.0;1.0;1.0;1.0;1.0|]
let initssh = initialeSandssynligheder
|> val1
|> Result.bind val2 // Error here
initssh
所以我的编译器告诉我,我的类型不匹配。我知道,val1 和 val2 都需要一个 float[] 并返回一个 Result
我的错误:
Error FS0001 Type mismatch. Expecting a
'(bool -> Result<float [],string>) -> 'a'
but given a
'Result<'b,'c> -> Result<'d,'c>'
The type 'bool -> Result<float [],string>' does not match the type 'Result<'a,'b>'... (Path)
因此,当将 Result.bind 语句添加到最后一次验证时,该消息告诉我虽然我正在补偿什么
【问题讨论】:
-
请发布编译器错误。不止一个吗?如果是这样,第一个错误是哪一个?它告诉你什么?
-
谢谢,我刚刚添加了编译器错误,据我了解,它仍然期待抱怨 val2 没有将
作为输入 -
这不是唯一的编译器错误,是吗?
-
不正确,但如果我解决了这个问题,我想我可以设法解决其他问题。同一行也给了我这些错误: 严重性代码描述项目文件行抑制状态错误 FS0001 类型不匹配。期望一个 '(bool -> Result
) -> 'a' 但给定一个 'Result -> Result' 类型 'bool - > Result ' 与类型 'Result ' 不匹配(路径) -
和严重性代码描述项目文件行抑制状态错误 FS0001 类型不匹配。期望一个 'float [] -> Result' 但给定一个 'float [] -> bool -> Result
' 类型 'Result'不匹配类型 'bool -> Result ' (path)