discriminated-union

    5熱度

    1回答

    首先,對於糟糕的標題表示歉意 - 我不明白足夠的F#來更好地描述問題。 考慮一個簡單的DU: type Money = | USD of decimal | GBP of decimal | EUR of decimal static member (+) (first: Money, second: Money) = match first,

    3熱度

    4回答

    我要實現原語 type point = double * double type shape = | Point of point | Line of point * point | Vector of point | Circle of point * double with member this.ToString = functi

    1熱度

    1回答

    我想限制工會類型A和B類型的參數,其中B是一些通用類型,它將是子類型。我想提出的對象在這個方法: def accept[A](a:A)(implicit ev:FooOrBaish[A]){ /* do something */} 這是,我怎麼指定implicits: case class Foo(i:Int) trait Baish case object Bar extends Bai

    8熱度

    3回答

    我已經定義了以下歧視工會的歧視工會: type Expr = | Con of Num | Var of Name | Add of Expr * Expr | Sub of Expr * Expr | Mult of Expr * Expr | Div of Expr * Expr | Pow of Expr * Expr

    1熱度

    1回答

    衆所周知,類繼承是「開放」類型 - 分區和歧視聯盟是「封閉」類型 - 分區。但是,雖然添加新的子類很容易,但添加新的虛擬函數需要修改所有現有的類。同時,受歧視的工會可以輕鬆添加新的功能。 | inheritance | discriminated union new type | easy | hard new function | hard | easy OOP已經有足夠的,

    4熱度

    3回答

    假設我有以下DU: type Something = | A of int | B of string * int 現在我用它的功能是這樣的: let UseSomething = function | A(i) -> DoSomethingWithA i | B(s, i) -> DoSomethingWithB s i 這樣的作品,但我不得不解構DU爲了將它傳遞給DoSomet

    4熱度

    2回答

    我想要一個報告列表。報告可以是詳細信息或部門類型。 module Data type Section = { Header: string; Lines: string list; Total: string } type Detail = { State: string; Divisions: string list; S

    22熱度

    4回答

    我想在深入研究複雜示例之前弄清楚F#的基本知識。我正在學習的材料引入了歧視聯盟和記錄類型。我已經審查了兩者的材料,但我仍然不清楚爲什麼我們會使用這兩種材料。 我創造的大多數玩具例子似乎都可以在兩者中實現。記錄似乎是非常接近我所認爲的在C#中的對象,但我想避免依賴映射到C#的方式來了解F# 所以...... 是有明確的理由使用一個在另一個? 是否存在某些適用的規範情況? 是否有某些功能可用於其中一個

    4熱度

    2回答

    是的,一個簡單的問題,但我找不到它的專家意見。 我使用的計算表達式序列服務器端進程。當我的函數具有相同的簽名時,它非常有幫助,所以我有一個具有不同組合的歧視聯盟。我有幾個快速,初學者的問題。 是否有建議的DU選項數量的上限?目前我的DU有九個選項,但隨着項目的進展,這個數字會增加。如果我在項目結束時達到30或40,該怎麼辦? 也許會有一個問題,如果一些方案得到「長」?目前,平均選項大約有四種或五種

    2熱度

    2回答

    考慮下面的代碼的理解推理... type TypeOne() = member val Name = "" with get, set type TypeTwo() = member val Name = "" with get, set member val Property = 0 with get, set [<RequireQualifiedAcces