[Main website]


In Dok, like in CL, a function can return a result with optional attributes. For example the integer division can return the rest as optional attribute. The run-time should support this behavior in an efficient way.

Int.div(x::Int)::Int[slot rest::Int] {
  var x::Int self.floor(x)
  var y::Int self.ceil(x)
  var r::Int y - x

  return x(with rest r)

var t::Int 5.div(2)

assert t.isa(Int)
assert t == 2

assert t.isa(Int[slot rest::Int])
assert t.rest == 1