非常简单的否定操作功能。
let negation (value:option<bool>) =
match value with
|Some true -> Some false
|Some false -> Some true
|None -> failwith "OOPS"
但是我称之为:
negation Some true
它抱怨
This value is not a function and cannot be applied
答案 0 :(得分:8)
你需要一些parens:
negation (Some true)
或者:
negation <| Some true
如果没有那样的P#编译器会将该行理解为
(negation Some) true
因为函数应用程序是左绑定的,然后类型不匹配:否定需要是类型:('a -> option 'a) -> bool -> bool
,它显然不是bool option -> bool option
的类型
此外:(包括意见)
否定函数称为not : bool -> bool
。你试图在选项包装的bool上使用它,所以也许这应该足够了:
let negation : bool option -> bool option = Option.map not