       fileprivate override func xmlString(options mask: XMLNode.Options) -> String {
         return self._base.xmlString(options:mask)
       }
+      
+      fileprivate override func _isEqual(to other: AnyElement._Box) -> Bool {
+        guard case let other as _Some<E> = other else { return false }
+        return self._base == other._base
+      }
+      
+      #if swift(>=4.2)
+      public override func hash(into hasher:inout Hasher) { hasher.combine(self._base) }
+      #else
+      public var hashValue: Int { return self._base.hashValue }
+      #endif
     }
     
     fileprivate class _TextHolder<E>: _Some<E> where E: TextHolderElement {

  }
  
  private var _box: _Box
  
  /// Initialize with the given element.
  public init<E>(_ element:E) where E:Element {

}

/// Type-erasure for `Element`.
public struct AnyElement: Element {
  fileprivate class _Box: Hashable {
    fileprivate var name: String? { _mustBeOverriden() }
    fileprivate var localName: String? { _mustBeOverriden() }
    fileprivate var uri: String? { _mustBeOverriden() }
    fileprivate var stringValue: String? { get { _mustBeOverriden() } set { _mustBeOverriden() } }
    fileprivate func xmlString(options mask:XMLNode.Options) -> String { _mustBeOverriden() }
    
    fileprivate func _isEqual(to other:_Box) -> Bool { _mustBeOverriden() }
    fileprivate static func == (lhs: AnyElement._Box, rhs: AnyElement._Box) -> Bool {
      return lhs._isEqual(to:rhs)
    }
    
    #if swift(>=4.2)
    public func hash(into hasher:inout Hasher) { _mustBeOverriden() }
    #else
    public var hashValue: Int { _mustBeOverriden() }
    #endif
    
    fileprivate class _Some<E>: _Box where E: Element {
      fileprivate var _base: E
