infix operator ??= {
  associativity right
  precedence 90
  assignment
}

func ??=<T>(inout optional: T?,  @autoclosure defaultValue: () -> T?) {
  optional = optional ?? defaultValue()
}