You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OCaml开发:模块间类型不匹配错误排查求助

OCaml类型错误原因分析

问题代码片段

ast.ml

type fundef = FunDef of string * string list * expr

interpreter.ml

let interp_fundef (d: Ast.fundef) (g: FStore.t) : FStore.t = 
  match d with
  | Ast.FunDef (x, pl, e) -> (FStore.add x (pl * e) g)

fStore.ml

module M = Map.Make(String)

type t = (string list * Ast.expr) M.t

let add = M.add
let mem = M.mem
let find = M.find
let empty = M.empty

错误原因

编译报错的核心是运算符误用导致的类型不匹配:

  • OCaml中*是整数乘法运算符,仅接受int类型的左右操作数。
  • 代码里的pl是string list类型,e是Ast.expr类型,用*连接它们时,编译器会强制要求pl转为int类型以满足乘法运算的类型要求,但显然无法完成转换,因此抛出类型错误。

你实际想要构造的是FStore.t要求的(string list * Ast.expr)元组,元组的构造应该用逗号,而非*。

修正后的代码

将interpreter.ml中的错误行修改为:

FStore.add x (pl, e) g

内容的提问来源于stack exchange,提问作者Gamja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:17:34