簡體   English   中英

F#Type聲明可能ala Haskell?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM