【发布时间】:2017-12-08 01:44:37
【问题描述】:
我正在标准 ML 中实现集合。目前它看起来像这样:
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
我希望map 函数能够获取结构SET 中的任何集合,理想情况下甚至不限于来自ListSetFn 函子的集合。但是,在顶层,它只能对由单个结构创建的集合进行操作:调用它的集合,例如:
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
有办法吗?我知道它可以在顶层声明,但我想隐藏内部实现,因此使用不透明的签名
【问题讨论】:
标签: functional-programming sml functor signature ml