2014-01-10 6 views
0

종속 나는 다음과 같은 모듈 서명 A 있습니다OCaml의 서명 오류

내가 a.mlia.cmi 파일을 얻기 위해 컴파일 할 수 있어요
module type A = 
sig 
    type exp = 
    Int of int 
    | Var of string 
end;; 

. 그러나, 나는 B를 정의하는 경우 :

module type B = 
sig 
    val compute : A.exp -> A.exp 
end;; 

ocamlc -i b.ml 오류 Unbound type constructor A.exp을 생산하고 실행할 수 있습니다. 왜 그런가요?

답변

1

OCaml은 각 소스 파일에 해당하는 외부 모듈을 무료로 제공합니다. 따라서 A.A라는 모듈 유형을 정의하고 있습니다. 모듈이 아니며 유형 모듈임을 유의하십시오.

그것은 당신의 a.ml (그리고 a.mli 당신이 좋아하는 경우는) 다음과 같은 단지 포함해야 가능 :

type exp = Int of int | Var of string 

그런 다음 당신은 당신의 b.ml 파일에서 A.exp을 참조 할 수 있습니다.

또한 a.mli는 소스 파일입니다. a.mli 파일이 있으면 컴파일하여 a.cmi 파일을 만들어야합니다.

+0

'A.A'를 피하면서 어떻게 든 서명 할 수 있습니까? 소스 코드가없는 일부 코드에서 서명을 복제하려고하는데 서명 만합니다. 그리고 당신의 접근 방식이 위와 같은 타입 정의를 위해 작동하는 동안, 나는'val'을 위해 그것을하는 법을 모른다. – bellpeace