通用TryValue類型的語法是什麼,它可以返回值'a或錯誤'b? type TryValue =
| Value of 'a
| Error of 'b
如果錯誤是一個字符串,那麼它的罰款: type 'a TryValue =
| Value of 'a
| Error of string
我想定義一個tryRun函數,它接受一個錯誤的創造者,一
讓我們有幾種類型的二進制節點,其他類型的節點之間的樹的類型定義,即 type Tree =
| BinaryNodeA of Tree * Tree
| BinaryNodeB of Tree * Tree
| [Other stuff...]
我要操縱這棵樹使用遞歸函數,例如,可以交換任何類型的二進制節點的子節點(通過構建新節點)。引起我瘋狂的問題是:如何匹配所有BinaryNode,
如果我有多個值共用一個孩子(Apple和MoreApples都有型Apple)可識別聯合... type Apples =
| GrannySmith
| Gala
type Fruit =
| Apple of Apples
| MoreApples of Apples
| Banana
let speakFruit = function
托馬斯用戶said in the comment方面: 我覺得「或」(又名識別聯合)和「與」(又名記錄)來模擬世界一個非常強大的功能技巧。有時候,功能/界面也很管用,但如果我傾向於堅持「或」 /「及」盡我所能:-) 想我建模Animal世界(開放的世界假設),我怎麼能通過使用歧視的聯合,記錄和有時函數/接口來做到這一點? 例如,使用animal types,我可以使用歧視聯盟對它們進行分類嗎? t
遵循SO和其他地方的建議,我嘗試使用接口來實現多態,如下面的簡化示例所示。 type IFace =
// abstract methods
abstract member foo: int -> int
type X(i: int) =
// some code
interface IFace with
member this.foo j
爲了調試的目的,我需要更多的浮點數詳細信息,而不是printfn "%A"給我的所有測試代碼都是一般化的。所以我想我box和匹配的類型來獲得有意義的輸出。 但是,類型可以是選項類型或Result<_, _>類型(成功/失敗)。這些類型的唯一模式匹配,當你把他們當作歧視工會,但如果我型式試驗他們,他們不會被擊中: // Illustrative example of what I'm trying
我想寫一些數字代碼,可以使用標量或向量(在這種情況下,分別來自DiffSharp D和DV類型)。有時候,我希望能夠爲使用,所以我已經定義了一個歧視工會爲他們: type IBroadcastable =
| Scalar of D
| Vect of DV
許多運營商都已經重載這兩種類型的,所以使用它們IBroadcastable我寫的代碼添加像這樣的聯盟: static