Я хочу смоделировать иерархию в F #, где каждый узел должен иметь одного родителя, за исключением, очевидно, корневого узла, у которого нет родителя.Мое наивное решение
type Node = {
Id: int // meta data for node
Parent: Node option
}
let root = { Id = 1; Parent = None}
let child1 = { Id = 2; Parent = Some(root)}
let child2 = { Id = 3; Parent = Some(child1)}
Но мой вход в F # был через @swlaschin, и он взорвал мои мысли созданием описательных доменов.Так что мне воняет, что Parent
- вариант, когда требуется 99% времени.Мои лучшие усилия:
type Node =
| Node of NodeMeta * Node
| Root of NodeMeta
and NodeMeta = {
Id: int
}
let root = Root({Id = 1})
let child1 = Node({Id = 2}, root)
let child2 = Node({Id = 3}, child1)
Есть ли более идиоматический способ?