F#中是否可能有一個區分的聯合,其值只能被賦值一次?我想像的是這樣的: type DogAttributes = { Age: int; Color: string; }
type Dog =
| Rex of DogAttributes ({ Age = 5; Color = "Brown"; }
| Fido of DogAttributes ({ Age = 3; Color = "
我的F#代碼的某些功能接收到的值作爲對象裝箱,即使底層值是鍵入的。如果這個值是一個有區別的聯合,那麼就不可能將它重新裝回到它的F#類型中。下面是一個簡單的例子: type Result<'TOk,'TError> =
| Ok of 'TOk
| Error of 'TError
type ResultA = Result<string, int>
let a = Ok "A"
le
我有學校類(2層構造)識別聯合: type School(name, antiquity) =
member this.Name: string = name
member this.Antiquity: int = antiquity
new(name) = School(name, 0)
而各類建築: type Building =
| House
|
我有一個地圖,其鍵可能採取各種形狀(我正在使用「形狀」鬆散)。爲了處理這個我創建了一個可識別聯合(DU): type AuxDataKey =
| OneString of string
| TwoStrings of string * string
| OneStringInt of string * int
| TwoStringsInt of
如何創建OCaml/F#DU類型,其案例是其他案例的子集? 例如,我想創建一個包含不同符號聲明類型的符號表,例如程序類型,變量和函數。乍一看,我可以看到一個變量包含它的類型,函數也包含一個類型和許多參數變量。所以我想用1 DU,而不是向分隔條件多條記錄或別名: type Symbol =
| TypeSymbol of id:string
| VariableSymbol of