2014-10-29 4 views
2

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에 필요한 모든 메소드를 작성하려는 경우 생성자를 노출해야합니까?

+1

단일 생성자는 유용하지 않으며 약간의 오버 헤드가 있습니다. 완전히 제거하는 것이 좋습니다. – gsg

+0

어떻게하면됩니까? 나는 유형이 재귀적인 생성자를 필요로한다고 생각했다. –

+1

'-rectypes' 옵션은 그러한 타입 정의를 허용합니다. 또 다른 가능성은 유형을 다르게 정의하는 것입니다.'type 'a t = Nil | Cons of ('a *'t) Lazy.t' (하지만 코드를 다시 작성해야합니다). – gsg

답변

5

이것은 구문 오류 일뿐입니다. mli 파일에는 세미콜론을 사용할 수 없습니다. 또한 오류가 아니더라도 ml 파일에서이 못생긴 더블 세미콜론을 사용할 필요가 없습니다.

+0

와우. 이제 정말 바보 같아. 도와 주셔서 감사합니다! –

관련 문제