OCaml单文件添加模块签名编译报错,如何正确编写?
解决OCaml单文件模块签名编译错误的方法
你的代码编译报错是因为OCaml语法不允许单独声明模块签名约束后,再定义同名模块。必须将签名与模块定义绑定,或者先定义模块类型再引用。以下是两种可行的修正方案:
方案一:签名与定义合并书写
直接把签名和模块定义通过=连接在同一结构中:
module Atom : sig val square: int -> int end = struct let square x = x * x end let () = print_int (Atom.square 5)
注意:如果你的签名里要保留标签参数x:int,那么实现和调用都要对应标签语法,否则会出现参数不匹配问题,示例如下:
module Atom : sig val square: x:int -> int end = struct let square ~x = x * x end let () = print_int (Atom.square ~x:5)
方案二:先定义模块类型再引用
先声明一个独立的模块类型,再让模块实现遵循该类型:
module type ATOM_SIG = sig val square: int -> int end module Atom : ATOM_SIG = struct let square x = x * x end let () = print_int (Atom.square 5)
两种方案都能让代码在单文件结构下正常编译运行。
内容的提问来源于stack exchange,提问作者flori10
相关产品推荐
相关产品推荐

