SML: какая разница между использованием abstype и использование подписи для скрытия реализации структуры?

Я сделал небольшую работу в SML в прошлом, но теперь я начинаю добираться до Более интересные части.

Использование Abstype ... с ... END Конструкция, я могу сделать вещи, но держать свои детали реализации скрыты. Я также могу создать подпись того, что я хочу сделать, и использовать оператор :> :> :> :> :> :> :> оператор, чтобы сделать структуру, придерживаясь этой подписи, которая хранит детали реализации.

не подписываются / сооружения просто более общая версия avstypes? Что я могу сделать с хверцами, которые я не могу сделать с подписими / структурами? Почему я когда-либо хочу использовать avstype?

заранее спасибо за помощь!

В качестве примера:

signature SET = sig
    type set
    val empty: set
    val insert: int * set -> set
    val member: int * set -> bool
end

structure Set :> SET = struct
    type set = int list
    val empty = []
    fun insert(x, s) = x::s
    fun member(x, []) = false
      | member(x, h::t) = (x = h) orelse member(x, t)
end

кажется, по крайней мере, так же мощный, как

abstype AbsSet = absset of int list with
    val empty = absset([])
    fun insert(x, absset(s)) = absset(x::s)
    fun member(x, absset([])) = false
      | member(x, absset(h::t)) = (x = h) orelse member(x, absset(t))
end
16
задан Alan 4 September 2011 в 01:01
поделиться