LazyList
유형을 만들고 있지만 LazyList.t
의 정의를 숨기려고합니다. 나는 다음과 같은 파일을 가지고 :생성자를 숨기려면 어떻게해야합니까?
LazyList.ml
type 'a t =
| Cell of ('a * 'a t) option Lazy.t
;;
let rec from_list l = ...;;
let rec from_string s = ...;;
let rec from_in_channel c = ...;;
let rec to_list l = ...;;
LazyList.mli
type 'a t;;
val from_list : 'a list -> 'a t;
val from_string : string -> char t;
val from_in_channel : in_channel -> char t;
val to_list : 'a t -> 'a list;
을 나는 다음과 같은 오류 얻을 ocamlc LazyList.mli
실행하면 :
File "LazyList.mli", line 1, characters 9-10:
Error: Syntax error
무엇 준다? LazyList.ml에 필요한 모든 메소드를 작성하려는 경우 생성자를 노출해야합니까?
단일 생성자는 유용하지 않으며 약간의 오버 헤드가 있습니다. 완전히 제거하는 것이 좋습니다. – gsg
어떻게하면됩니까? 나는 유형이 재귀적인 생성자를 필요로한다고 생각했다. –
'-rectypes' 옵션은 그러한 타입 정의를 허용합니다. 또 다른 가능성은 유형을 다르게 정의하는 것입니다.'type 'a t = Nil | Cons of ('a *'t) Lazy.t' (하지만 코드를 다시 작성해야합니다). – gsg