zeolite-lang-0.10.0.0: example/tree/tree.0rp
/* An interface for updating a key-value index.
*/
@value interface KVWriter<#k,#v|> {
set (#k,#v) -> (KVWriter<#k,#v>)
remove (#k) -> (KVWriter<#k,#v>)
}
/* An interface for looking up values from a key-value index.
*/
@value interface KVReader<#k|#v> {
get (#k) -> (optional #v)
}
/* An AVL implementation of KVWriter and KVReader.
*/
concrete Tree<#k,#v> {
refines KVWriter<#k,#v>
refines KVReader<#k,#v>
#k defines LessThan<#k>
// Creates a new Tree, e.g., Tree.new().
@type new () -> (Tree<#k,#v>)
// Normally you do not need to redeclare functions inherited from interfaces.
// The two redeclarations below are used to refine the return type from
// KVWriter to Tree.
@value set (#k,#v) -> (Tree<#k,#v>)
@value remove (#k) -> (Tree<#k,#v>)
}