该值不是函数,不能应用

时间:2016-01-05 15:53:13

标签: f#

非常简单的否定操作功能。

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

1 个答案:

答案 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