標準MLにセットを実装しています。現在、それは次のようになります。SML異なる構造の共通タイプ
signature SET = sig
type t
type 'a set
...
val map : ('a -> t) -> 'a set -> t set
end
functor ListSetFn (EQ : sig type t val equal : t * t -> bool end)
:> SET where type t = EQ.t = struct
type t = EQ.t
type 'a set = 'a list
...
fun map f = fromList o (List.map f)
end
私は理想的にもListSetFn
ファンクタからのものに制約されない、map
関数は構造SET
内の任意のセットを取ることができるようにしたいです。しかし、それだけで単一の構造によって作成されたセット上で動作することができ、トップレベルの:それはから呼び出された1つ、例えば:
functor EqListSetFn(eqtype t) :> SET where type t = t = struct
structure T = ListSetFn(struct type t = t val equal = op= end)
open T
end
structure IntSet = EqListSetFn(type t = int)
IntSet.map : ('a -> IntSet.t) -> 'a IntSet.set -> IntSet.t IntSet.set
私は本当にそれがされるようにしたいようものの
IntSet.map : ('a -> IntSet.t) -> 'a ArbitrarySet.set -> IntSet.t IntSet.set
のようなもの
これを行う方法はありますか?そのようなパラメータ化を実行するには2つの方法がありますが、私はそれがトップレベルで宣言することができ知っているが、私は内部の実装を隠し、したがって、原則的には不透明な署名(S)