sapphire-lang 0.8.0

Gradually typed scripting language where every value is an object and types are optional, checked at runtime
Documentation
class Box[T] {
  attr value: T

  def get -> T {
    self.value
  }

  def to_s -> String {
    "Box(#{self.value})"
  }
}

class Pair[A, B] {
  attr first: A
  attr second: B

  def swap -> Pair {
    Pair.new(first: self.second, second: self.first)
  }
}

def identity[T](x: T) -> T {
  x
}

def first_or_default[T](items: List[T], default: T) -> T {
  if items.empty?() { default }
  else { items.first }
}

b = Box.new(value: 42)
print(b.get)
print(b.to_s)

s = Box.new(value: "hello")
print(s.get)

p = Pair.new(first: 1, second: "one")
print(p.first)
print(p.second)

print(identity(99))
print(identity("sapphire"))

print(first_or_default([], 0))
print(first_or_default([10, 20, 30], 0))