     ///     numbers.insert(300, at: numbers.startIndex)
     ///
     ///     print(numbers)
-    ///     // Prints "[:| 300, 1, 2, 3, 100, 4, 5, 200 |:]"
+    ///     // Prints "[300, 1, 2, 3, 100, 4, 5, 200]"
     ///
     /// - Parameter newElement: The new element to insert into the deque.
     /// - Parameter i: The position at which to insert the new element.

    ///     var numbers = Deque([1, 2, 3, 4, 5])
    ///     numbers.prepend(100)
    ///     print(numbers)
    ///     // Prints "[:| 100, 1, 2, 3, 4, 5 |:]"
    ///
    /// Because deques increase their allocated capacity using an exponential
    /// strategy, prepending a single element to deque is an O(1) operation

        }
    }
}

extension Deque: ExpressibleByArrayLiteral {
    
    /// Creates a deque from the given array literal.
    ///
    /// Do not call this initializer directly. It is used by the compiler
    /// when you use an array literal. Instead, create a new deque by using an
    /// array literal as its value. To do this, enclose a comma-separated list of
    /// values in square brackets.
    ///
    /// Here, a deque of strings is created from an array literal holding
    /// only strings.
    ///
    ///     let ingredients: Deque = ["cocoa beans", "sugar", "cocoa butter", "salt"]
    ///
    /// - Parameter elements: A variadic list of elements of the new array.
    public init(arrayLiteral elements: Element...) {
        self.init(elements)
    }
}

extension Deque: CustomStringConvertible, CustomDebugStringConvertible {
    /// A textual representation of the array and its elements.
    public var description: String {
        return "[" + map(String.init(describing:)).joined(separator: ", ") + "]"
    }
    
    /// A textual representation of the array and its elements, suitable for
    /// debugging.
    public var debugDescription: String {
        return "Deque(" + description + ")"
    }
}
