packages feed

zeolite-lang-0.14.0.0: example/tree/tree.0rp

/* An interface for updating a key-value index.
 */
@value interface KVWriter<#k,#v|> {
  // #self below always means the type of value that the function is being
  // called from. For example, the type of foo.remove(key) is the same type as
  // foo is.

  set (#k,#v) -> (#self)
  remove (#k) -> (#self)
}

/* 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>)

  // Since set and remove return #self, their implementations in Tree must
  // return Tree<#k,#v>.
}