OCaml 为类型疯狂

OCaml gets crazy about types

我在接口中声明了如下函数

type t
val empty : t
val mem : int -> t -> bool

现在我试着打电话给

open ISet
open OUnit2
open Printf
open List
(* ... *)
let s = mem 8 empty

但我得到的是

This expression has type ISet.t but an expression was expected of type
     int list

这到底是怎么回事?? 我什至在 .ml 文件中明确定义了类型

let mem (x : int) (set : t) =
    let rec loop = function
        | Node (l, k, r, _) ->
            let c = cmp_val k x in
            (contains k x) || loop (if c < 0 then l else r)
        | Empty -> false in
    loop set

你能提供更多代码吗? t 是一个抽象类型,所以我猜你必须在某个地方定义它。我还怀疑 mem 不是正确的 mem 并指向 List.mem.