F#教程包括以下代码段:
/// A record for a person's first and last name
type Person = {
First : string
Last : string
}
/// define a discriminated union of 3 different kinds of employees
type Employee =
| Engineer of Person
| Manager of Person * list<Employee> // manager has list of reports
| Executive of Person * list<Employee> * Employee // executive also has an assistant
将经理和高管描述为元组这一事实冒犯了我的感官(我很容易被冒犯)。这似乎并不是非常表达。我尝试修改它们如下:
/// define a discriminated union of 3 different kinds of employees
type Employee =
| Engineer of Person
| Manager of { Name: Person; Reports: Employee list } // manager has list of reports
| Executive of { Name: Person; Reports: Employee list; Assistant: Employee} // executive also has an assistant
很遗憾,Manager和Executive的定义现在会出错:"这个结构已过时;请考虑使用单独的记录类型。" 好的,看起来合理,让我们称其为ManagerType。但等等... ManagerType涉及到Employee(对于报告部分),而Employee又涉及到ManagerType(对于Manager选项)。
这里有解决方案吗?两个数据结构不能相互定义吗?