2016-01-05 21 views
1

非常簡單的函數用於否定操作。這個值不是一個函數,不能應用

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 
+3

只是一個側面說明:如果你並不真的需要拋出異常,當參數爲'None'你可以使用這個函數:'let negation = Option.map not' – Petr

回答

8

你需要一些括號有:

negation (Some true) 

或者:

negation <| Some true 

不一樣,F#編譯器的括號會明白,行

(negation Some) true 

因爲函數應用是左結合,然後類型不匹配:否定將需要類型:('a -> option 'a) -> bool -> bool這顯然ISN 「T(是bool option -> bool option類型的)

此外:(含意見)

否定函數被調用not : bool -> bool。您正在嘗試使用由選項包裹布爾,所以也許這應該是足夠了:

let negation : bool option -> bool option = Option.map not 
+1

爲什麼需要parens? – tomab

+0

我擴展了回答,以解釋爲什麼他們需要。 –

相關問題