我正在使用ocaml为bean构建一个简单的编译器。在bean中,每个类型定义都包含
类型规范
标识符。
以下任何一种类型规范:
1.关键字'bool'或'int'
2.由逗号分隔的字段定义列表,由{和}
包围3.an identifier
我想定义两种类型:
type field_def = (ident * typespec)
type typespec =
| Bool
| Int
| Tident of ident
| Tfield_def of field_def list
type typedef = (ident * typespec)
我在field_def的定义中使用type,但在下一个定义中定义它,因此总会出现类型unbound错误。我该如何解决?
答案 0 :(得分:2)
如果要创建彼此依赖的类型,则必须使用and
:
type a = A | OfB of b
and b = B | OfA of a
与想要定义相互递归函数时相同:
let rec is_even n = n = 0 || is_odd (n - 1)
and is_odd n = n <> 0 && is_even (n - 1)