SML 모듈에서 모든 유형이 불투명 한 서명으로 숨기는 것을 막기 위해 서명에 구체적인 유형을 지정할 수 있습니다.표준 ML : 불투명 한 시그니처가있는 형식으로 투명하게 만들기
나는 테이블 형식을 숨기고 있지만 입력 형식을 투명하게 유지하면서 기호 테이블을 만드는 데있어 펑터로이를 수행하려고합니다. 하지만 불투명 한 어시스턴트를 할 때마다 항목 유형에 액세스 할 수 없습니다. 나는이 같은 항목 구조체를 만들고 함께 펑를 인스턴스화 할 때
signature ST_ENTRY = sig
type entry
val name : entry -> string
end
signature SYMTABLE = sig
structure E: ST_ENTRY
type symentry = E.entry
type symtable
val empty: symtable
val insert: symtable -> E.entry -> symtable
val lookup: symtable -> string -> E.entry option
end
functor SymtableFn (Ent:ST_ENTRY) :> SYMTABLE = struct
structure E = Ent
type symentry = E.entry
type symtable = E.entry list
val empty: symtable = []
fun fromList symlist = symlist
fun insert (tab: symtable) e = e::tab
end
, 그런 : 여기 내 서명과 펑은
structure Myentry : ST_ENTRY = struct
type entry = {name: string, typ: string}
fun name (e:entry) = #name e
end
structure Mytable = SymtableFn (Myentry)
val tab = Mytable.insert (Mytable.empty) {name="x", typ="str"}
내가 마지막 줄에 대한 유형 충돌을 얻을 수 있지만, 불투명 한 어 센션을 끄면 제대로 작동합니다. 나는 SML/NJ와 Moscow ML 모두를 시도해 보았고 동일한 오류가 발생했습니다. 내가 생각하는 것처럼 왜 이것이 효과가 없습니까? 항목 유형을 투명하게 만들 수있는 방법이 있습니까?
에 위의 변경 구문 오류를 피하십시오. 귀하의 제안에 따라, 저는 하부 구조를 SYMTABLE에서 제거했습니다; 나는 그 문제의 문제를 풀기 위해 추가했다. –