 	// MARK: [BaseMappable]
 
 	/// Returns a `[BaseMappable]` or throws an error.
-	public func value<T: BaseMappable>(_ key: String) throws -> [T] {
+	public func value<T: BaseMappable>(_ key: String, file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [T] {
 		let currentValue = self.currentValue(for: key)
 		guard let jsonArray = currentValue as? [Any] else {
-			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[Any]'")
+			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[Any]'", file: file, function: function, line: line)
 		}
 		return try jsonArray.enumerated().map { i, json -> T in
       return try Mapper<T>().mapOrFail(JSONObject: json)

	}

	/// Returns a `[BaseMapple]` using transform or throws an error.
	public func value<Transform: TransformType>(_ key: String, using transform: Transform) throws -> [Transform.Object] {
		let currentValue = self.currentValue(for: key)
		guard let jsonArray = currentValue as? [Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[Any]' ")
		}
		return try jsonArray.enumerated().map { i, json -> Transform.Object in
			guard let object = transform.transformFromJSON(json) else {
				throw MapError(key: "\(key)[\(i)]", currentValue: json, reason: "Cannot transform to '\(Transform.Object.self)' using \(transform)")
			}
			return object
		}

	// MARK: [String: BaseMappable]

	/// Returns a `[String: BaseMappable]` or throws an error.
	public func value<T: BaseMappable>(_ key: String, file: StaticString = #file, function: StaticString = #function, line: UInt = #line) throws -> [String: T] {
		let currentValue = self.currentValue(for: key)
		guard let jsonDictionary = currentValue as? [String: Any] else {
			throw MapError(key: key, currentValue: currentValue, reason: "Cannot cast to '[String: Any]'", file: file, function: function, line: line)
		}
		var value: [String: T] = [:]
		for (key, json) in jsonDictionary {
