 	}
 }
 
-private func assertExpected<T, U>(actual: T?, match: (T, U) -> Bool, expected: U?, message: String, file: String, line: UInt) -> T? {
+private func assertExpected<T, U>(actual: T?, _ match: (T, U) -> Bool, _ expected: U?, _ message: String, _ file: String, _ line: UInt) -> T? {
 	switch (actual, expected) {
 	case (.None, .None):
 		return actual

/// This is useful for asserting the equality of collections which only define equality for Equatable element types.
///
///		assert(x, ==, y)
public func assert<T, U>(@autoclosure expression1: () -> T, test: (T, U) -> Bool, @autoclosure expression2: () -> U, message: String = "", file: String = __FILE__, line: UInt = __LINE__) -> T? {
	return assertExpected(expression1(), test, expression2(), message, file, line)
}


/// Asserts the equality of two Equatable values.
///
/// Returns the value, if equal and non-nil.
public func assertEqual<T: Equatable>(@autoclosure expression1: () -> T?, @autoclosure _ expression2: () -> T?, _ message: String = "", _ file: String = __FILE__, _ line: UInt = __LINE__) -> T? {
	return assertExpected(expression1(), { $0 == $1 }, expression2(), message, file, line)
}

