[英]F# Type declaration possible ala Haskell?
我看了很多來源:似乎不可能在F#ala Haskell中聲明一個類型定義:
' haskell type def:
myFunc :: int -> int
我想在F#中使用這種類型的def風格 - FSI很樂意回復我:
fsi> let myType x = x +1;;
val myType : int -> int
我想在Haskell中明確說明F#中的類型def簽名。 有沒有辦法做到這一點? 我想用F#寫:
//invalid F#
myFunc : int -> int
myFunc x = x*2
通常的方法是let myFunc (x:int):int = x+1
。
如果你想更接近haskell風格,你也可以let myFunc : int -> int = fun x -> x+1
。
如果要將可讀類型聲明與實現分開,可以使用“fsi”文件(F#簽名文件)。 'fsi'只包含類型,通常還包含注釋 - 您可以在F#庫的源代碼中看到一些很好的示例。 您將創建兩個這樣的文件:
// Test.fsi
val myFunc : int -> int
// Test.fs
let myFunx x = x + 1
這適用於已編譯的項目,但您無法使用F#Interactive輕松使用此方法。
另一種選擇是使用“類型縮寫”( http://msdn.microsoft.com/en-us/library/dd233246.aspx )
type myType = int -> int
let (myFunc : myType) = (fun x -> x*2)
您可以在F#中執行此操作,以指定myType的返回值。
let myType x : int = x + 1
您也可以指定參數的類型。
let myType (x : int) : int = x + 1
希望這可以幫助!
另請參閱F#的基本語法 - 類型 (在“類型注釋”下稍微討論了這個方面)。
是的,你可以使用lambda函數
myFunc : int -> int =
fun x -> x*2
這也避免了haskell寫兩次函數名的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.