class Person {
  def walk: Unit = ()
}

val person: Person = new Person

val person: Person{def hi: String} = new Person {
  def hi = "hello"
}

trait Runner {
  def run: Unit = ()
}

val person: Person with Runner = new Person with Runner

def walkAndRun(p: Person with Runner) {
  p.walk
  p.run
}

def walkAndGreet(p: Person{def hi: String}): String = {
  p.walk
  p.hi
}

def greet(g: Any{def hi: String}): String =
  g.hi

// syntactic sugar
def greet(g: {def hi: String}): String =
  g.hi
