gpt4 book ai didi

types - Ocaml : Passing constructor type between modules

转载 作者:行者123 更新时间:2023-12-04 23:07:18 25 4
gpt4 key购买 nike

我有这个模块类型:

module type MOD =    
sig
type operand
type op
val print : op -> string
end;;

MOD的一个实现是:
module M1:MOD =
struct
type operand = Mem of int | Reg of int | Const of int
type op = Add of operand * operand| Sub of operand * operand
let print op = match op with
| Add _ -> "Add"
| Sub _ -> "Sub"
end;;

我想创建一个参数化模块女巫采取 op从第一个模块输入
并在该类型的变量上实现函数。像这样:
module  ARCHI = functor (M : MOD) ->
struct
type op = M.op

let execute o = match o with
| Add (x,y) -> x + y
| Sub (x,y) -> x - y
end;;

我收到错误 : Unbound constructor Add .我该如何管理?

最佳答案

您已声明类型 op在 MOD 中是抽象的,然后你已经定义了你的仿函数来获取 MOD 类型的模块 M。因此,您正确地无法访问 op 的实现。否则,您的仿函数不会执行它声称的任何类型 MOD 的模块,而不仅仅是您定义的特定 M1。

您可以通过在签名中写出类型的完整定义来公开 MOD 中 op 的实现。但是,尚不清楚您是否真的需要一个仿函数。

关于types - Ocaml : Passing constructor type between modules,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com