     public func dictionary(first: PathFragment, _ rest: PathFragment...) throws -> [Swift.String: JSON] {
         return try fetchValueAtPath(first, rest) { try $0.dictionary() }
     }
-    
+
     // MARK: Simple optional unpacking
-    
-    private func optionalAtPath<Value>(first: PathFragment?, _ rest: [PathFragment], ifNotFound: Swift.Bool, ifNull: Swift.Bool, @noescape getter: JSON throws -> Value) throws -> Value? {
+
+    private func optionalAtPath<Value>(path: [PathFragment], ifNotFound: Swift.Bool, ifNull: Swift.Bool, @noescape getter: JSON throws -> Value) throws -> Value? {
         var json: JSON?
         do {
-            json = try valueAtPath(first, rest, detectNull: true)
+            json = try valueAtPath(path, detectNull: true)
             return try getter(unsafeUnwrap(json))
         } catch Error.IndexOutOfBounds where ifNotFound {
             return nil

    ///   * `TypeNotConvertible`: The target value's type inside of the `JSON`
    ///     instance does not match the decoded value.
    ///   * Any error that arises from decoding the value.
    public func decode<Decoded: JSONDecodable>(first: PathFragment, _ rest: PathFragment..., ifNotFound: Swift.Bool, type: Decoded.Type = Decoded.self) throws -> Decoded? {
        return try decodedAtPath(first, rest, ifNotFound: ifNotFound, ifNull: false)
    }

    /// Optionally retrieves a `Double` from a path into JSON.

    /// - returns: A text `String` if a value could be found, otherwise `nil`.
    /// - throws: One of the `JSON.Error` cases thrown by `decode(_:ifNull:type:)`.
    /// - seealso: `JSON.decode(_:ifNull:type:)`
    public func string(path: PathFragment..., ifNull: Swift.Bool) throws -> Swift.String? {
        return try decodedAtPath(path, ifNotFound: false, ifNull: ifNull)
    }

    /// Optionally retrieves a `Bool` from a path into JSON.
