OCaml中错误的更具体说明

时间:2014-05-14 20:30:01

标签: interface compilation ocaml

在ensemble.mli文件中我有

type 'a t;;
val ajouter : 'a -> 'a t -> 'a t 

在ensemble.ml文件中:

type 'a t='a list
let rec ajouter =function a -> function 
     [] ->[a]
     |h::t -> if h=a then h::t else h::(ajouter a t) 

编译后:

ocamlc ensemble.mli ensemble.ml

#load "ensemble.cmo"
Ensemble.ajouter 1 [];;

**Error: This expression has type 'a list but an expression 
   was expected of type int Ensemble.t**

我必须能够详细解释这个错误,但我不知道如何解决它。所以我真的需要你的帮助。

1 个答案:

答案 0 :(得分:2)

您的类型t是抽象的。因此,Ensemble模块外部的任何内容都不能具有该类型。因此,[]没有您希望的'a Ensemble.t类型。

通常的解决方案是从模块中导出名为(例如)empty(或vide)的值。