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

    }
}

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

extension Data: NodeRepresentable {
    public func represented() throws -> Node {
        return Node(base64EncodedString(), Tag(.binary))
    }
}

extension Date: NodeRepresentable {
    public func represented() throws -> Node {
        return Node(iso8601string, Tag(.timestamp))
    }

}

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