如何创建OCaml/F#DU类型,其案例是其他案例的子集?递归区分的工会案例类型
例如,我想创建一个包含不同符号声明类型的符号表,例如程序类型,变量和函数。乍一看,我可以看到一个变量包含它的类型,函数也包含一个类型和许多参数变量。所以我想用1 DU,而不是向分隔条件多条记录或别名:
type Symbol =
| TypeSymbol of id:string
| VariableSymbol of id:string * type':TypeSymbol
| FunctionSymbol of id:string * params':VariableSymbol list * type':TypeSymbol
但这是错误的,因为杜情况下不能是其他情况的子集。我如何重新格式化类型来声明DU个案是递归的?
(对于它的价值,ocaml的和F#是不一样的语言。你给的代码是无效的OCaml,但很明显,你在问什么。) –