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とモスクワMLの両方で試してみて、同じエラーが出ます。私はそれがすべきだと思うように、なぜこれが機能しないのですか?エントリータイプを透明にする方法はありますか?
に上記を変更したいです構文エラーを回避する。あなたの提案によれば、私は 'SYMTABLE'から部分構造を削除しました。私はその質問の問題を解決するために追加しただけでした。 –