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.
我在接口中声明了如下函数
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.