         }
     }
 
+    fileprivate extension Node {
+        static let unused = Node("", .unused)
+    }
+
+    fileprivate extension Tag {
+        static let unused = Tag(.unused)
+    }
+
+    fileprivate extension Tag.Name {
+        static let unused: Tag.Name = "tag:yams.encoder:unused"
+    }
+
     fileprivate class _YAMLEncoder: Swift.Encoder {
 
-        var node: Node = ""
+        var node: Node = .unused
 
         init(codingPath: [CodingKey] = []) {
             self.codingPath = codingPath

        func encode(_ value: Double) throws { try represent(value) }

        func encode(_ value: String) throws {
            assertCanEncodeSingleValue()
            node = Node(value)
        }

        func encode<T>(_ value: T) throws where T : Encodable {
            if let date = value as? Date {
                node = date.representedForCodable()
            } else if let representable = value as? ScalarRepresentable {

        var userInfo: [CodingUserInfoKey : Any] = [:]

        func container<Key>(keyedBy type: Key.Type) -> KeyedEncodingContainer<Key> {
            if canEncodeNewValue {
                node = [:]
            } else {
                precondition(
                    node.isMapping,
                    "Attempt to push new keyed encoding container when already previously encoded at this path."
                )
            }
            let wrapper = _KeyedEncodingContainer<Key>(referencing: self)
            return KeyedEncodingContainer(wrapper)
        }

        func unkeyedContainer() -> UnkeyedEncodingContainer {
            if canEncodeNewValue {
                node = []
            } else {
                precondition(
                    node.isSequence,
                    "Attempt to push new keyed encoding container when already previously encoded at this path."
                )
            }
            return _UnkeyedEncodingContainer(referencing: self)
        }

        func singleValueContainer() -> SingleValueEncodingContainer {
            return self
        }

        // MARK: Utility

        fileprivate var canEncodeNewValue: Bool {
            return node == .unused
        }
    }

