 }()
 
 extension Double: ScalarRepresentable {
-    public func represented() throws -> Node {
-        return Node(doubleFormatter.string(for: self)!.replacingOccurrences(of: "+-", with: "-"), Tag(.float))
+    public func represented() -> Node.Scalar {
+        return .init(doubleFormatter.string(for: self)!.replacingOccurrences(of: "+-", with: "-"), Tag(.float))
     }
 }
 
 extension Float: ScalarRepresentable {
-    public func represented() throws -> Node {
-        return Node(floatFormatter.string(for: self)!.replacingOccurrences(of: "+-", with: "-"), Tag(.float))
+    public func represented() -> Node.Scalar {
+        return .init(floatFormatter.string(for: self)!.replacingOccurrences(of: "+-", with: "-"), Tag(.float))
     }
 }
 

}

extension Decimal: ScalarRepresentable {
    public func represented() throws -> Node {
        return Node(description)
    }
}

extension URL: ScalarRepresentable {
    public func represented() throws -> Node {
        return Node(absoluteString)
    }
}



// MARK: - ScalarRepresentable
/// Type is representabe as `Node.scalar`
public protocol ScalarRepresentable: NodeRepresentable {
    func represented() -> Node.Scalar
}

extension ScalarRepresentable {
    public func represented() throws -> Node {
        return .scalar(represented())
    }
}

extension Bool: ScalarRepresentable {
    public func represented() -> Node.Scalar {
        return .init(self ? "true" : "false", Tag(.bool))
    }
}

extension Data: ScalarRepresentable {
    public func represented() -> Node.Scalar {
        return .init(base64EncodedString(), Tag(.binary))
    }
}

extension Date: ScalarRepresentable {
    public func represented() -> Node.Scalar {
        return .init(iso8601String, Tag(.timestamp))
    }

    private var iso8601String: String {
