OCaml中FI与UNKNOWN类型定义及FI构造器报错解析
报错本质
你在utop中输入FI触发的类型报错,原因是FI是当前作用域内已定义的代数数据类型构造子,而非未定义的自由标识符。从报错提示“构造子期望3个参数”的信息,即可直接反推其完整类型定义。
FI的具体类型定义 结合你提到的TAPL教材中的类型示例,当前作用域下和FI关联的完整类型定义为:
type info = | FI of string * int * int | UNKNOWN
FI的构造子签名为:FI : string -> int -> int -> info
它需要依次接收1个字符串、2个整数共3个参数,才能生成一个合法的info类型值。你仅输入构造子名称、未传入任何参数的写法,自然会触发参数数量不匹配的报错。
可以通过以下合法写法验证其行为:
FI ("demo.ml", 12, 35);;
该表达式会正常返回一个info类型的实例。
UNKNOWN的对应类型定义 UNKNOWN是上述info和类型的无参数构造子,对应的构造子签名为:UNKNOWN : info
它不需要传入任何参数,自身就是一个完整的info类型值。你可以直接在utop中输入UNKNOWN;;,不会触发参数数量不匹配的报错。
内容的提问来源于stack exchange,提问作者linrongbin
相关产品推荐
相关产品推荐

