如何定义相互包含的类型

时间:2016-03-29 11:23:18

标签: ocaml

我正在使用ocaml为bean构建一个简单的编译器。在bean中,每个类型定义都包含

  1. 关键字'typedef',
  2. 类型规范

  3. 标识符。

  4. 以下任何一种类型规范:

    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错误。我该如何解决?

1 个答案:

答案 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)