functor ASSOCLIST( type Item eqtype Key ):DictSig = struct type Item = Item and Key = Key exception Lookup datatype Dict = D of (Key * Item) list val empty = D [] fun lookup (D((k,e)::t)) key = if(k = key)then e else lookup (D t) key | lookup _ _ = raise Lookup fun rem _ [] = [] | rem key ((entry as (k,_))::t) = if(k = key) then t else entry :: rem key t fun enter ((k,e), D entries) = D((k, e) :: rem k entries) fun remove (key, D entries) = D(rem key entries) fun alist (D l) = l end;