   case .Double(let v):
     return .Double(-v)
   default:
-    fatalError("`-` operator may only be used on .Int or .Double Yaml values")
-  }
-}
+    return .Invalid("`-` operator may only be used on .Int or .Double Yaml values")
+  }
+}

  case Array([Yaml])
  case Dictionary([Yaml: Yaml])
  case Invalid(Swift.String)

  public init(nilLiteral: ()) {
    self = .Null
  }

  public init(booleanLiteral: BooleanLiteralType) {
    self = .Bool(booleanLiteral)
  }

  public init(integerLiteral: IntegerLiteralType) {
    self = .Int(integerLiteral)
  }

  public init(floatLiteral: FloatLiteralType) {
    self = .Double(floatLiteral)
  }

  public init(stringLiteral: StringLiteralType) {
    self = .String(stringLiteral)
  }

    }
    self = .Array(array)
  }
}

extension Yaml: DictionaryLiteralConvertible {
  public init(dictionaryLiteral elements: (Yaml, Yaml)...) {
    var dictionary = [Yaml: Yaml]()
    for (k, v) in elements {
