【发布时间】:2016-10-07 00:27:03
【问题描述】:
我对 F# 还很陌生,我想对现实世界中具有相当复杂的“has-a”关系的事物进行建模。层次结构的顶部是 A - D 四种类型,它们具有以下关系:
A
|
+--A
|
+--B
| |
| +--B
| |
| +--D
| |
| +--D
|
+--C
| |
: +--D
| |
| +--D
:
所以类型 B 可以有一个 A 或 B 的“父级”,而类型 D 可以有一个 B、C 或 D 的父级。
我想使用可区分联合来约束每种类型的父级,因此不能将它们分配给无效的父级,例如:
type B_Parent = A | B
type D_Parent = B | C | D
然后我想使用记录对每种类型进行建模,其中一个字段是父字段,例如:
type A = { parent:A_Parent; ... }
type B = { parent:B_Parent; ... }
type C = { parent:C_Parent; ... }
type D = { parent:D_Parent; ... }
C_Parent 不是问题,因为它的父类型 A 是预先声明的。我已经为 A_Parent 使用了“A 选项”。但是我一直无法弄清楚如何定义 B_Parent 和 D_Parent,因为它们对自身和其他类型的嵌套依赖?
【问题讨论】:
标签: f#