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) = …

它与状态模块一起工作,但不能解决代理模块的问题。只能应用于
代理
,与我应用于
状态
的修改相同(我在回答中添加了一些说明)。