 //
 //
 
-public protocol ArrayType: Collection {
+public protocol ArrayProtocol: Collection {
     associatedtype Element
     init()
     mutating func append(_ element: Element)
-    mutating func append<S: Sequence> (contentsOf newElements: S) where
-        S.Iterator.Element == Iterator.Element
-    // FIXME: Add contains(_:)
-}
-
-extension Array: ArrayType { }
+    mutating func append<S> (contentsOf newElements: S)
+        where S: Sequence, S.Iterator.Element == Iterator.Element
+}
+
+extension Array: ArrayProtocol { }
 
 public enum DictionaryProtocolError: Error {
     case illFormedKeyPath

    Value: DictionaryProtocol,
    Iterator.Element == (Key, Value),
    Value.Iterator.Element == (Value.Key, Value.Value),
    Value.Value: ArrayType,
    Value.Value.Element: Equatable
{


    Value: DictionaryProtocol,
    Iterator.Element == (Key, Value),
    Value.Iterator.Element == (Value.Key, Value.Value),
    Value.Value: ArrayProtocol
{

    /// Ensure that there is an Array-type value for the given `keyPath`.
    public mutating func ensureValue(for keyPath: KeyPath) throws {

        guard
