Ocaml 未绑定类型构造函数错误
我对联锁模块有问题: 我想引用第一个模块中定义的类型Ocaml 未绑定类型构造函数错误,ocaml,Ocaml,我对联锁模块有问题: 我想引用第一个模块中定义的类型 module type E = sig type event end type ev = Ev;; module EE : E = struct type event = ev end;; module type StateType = functor (E : E ) -> sig type event = E.event type state_t = { mutable event
module type E = sig
type event
end
type ev = Ev;;
module EE : E = struct type event = ev end;;
module type StateType = functor (E : E ) -> sig
type event = E.event
type state_t = {
mutable event_success : event option;
}
val set_event_success : state_t -> event option -> unit
val create : unit -> state_t
end
module State : StateType = functor (E : E) -> struct
type event = E.event
type state_t = {
mutable event_success : event option;
}
let create () = {
event_success = None;
}
let set_event_success s e = (s.event_success <- e;)
end
module S = State(struct type event = ev end);;
let s = S.create ();;
S.set_event_success s (Some(Ev));;
我得到这个错误:
Error: Unbound type constructor S.state_t
我不明白为什么会出现这个错误,因为S显然是用模块StateType
设置的
我的目标是做以下声明:
module Ag = Agent ( State(struct type event = ev end)) (struct type event = ev end)
我该怎么做呢?那是因为
StateType
是函子的类型,而不是模块的类型
您应该将StateType
声明为
module type StateType =
sig
type event
type state_t = {
mutable event_success : event option;
}
val set_event_success : state_t -> event option -> unit
val create : unit -> state_t
end
module State (E : E) : (StateType with type event = E.event) =
struct
type event = E.event
type state_t = {
mutable event_success : event option;
}
let create () = {
event_success = None;
}
let set_event_success s e = (s.event_success <- e;)
end
函子状态
为
module type StateType =
sig
type event
type state_t = {
mutable event_success : event option;
}
val set_event_success : state_t -> event option -> unit
val create : unit -> state_t
end
module State (E : E) : (StateType with type event = E.event) =
struct
type event = E.event
type state_t = {
mutable event_success : event option;
}
let create () = {
event_success = None;
}
let set_event_success s e = (s.event_success <- e;)
end
而代理
函子看起来像
module Agent (S : StateType) (E : E) : (AgentType with type event = E.event and type state_t = S.state_t) = …
它与状态模块一起工作,但不能解决代理模块的问题。只能应用于
代理
,与我应用于状态
的修改相同(我在回答中添加了一些说明)。