 // ------------------------------------------------------------------------------------------------
 // MARK: - Expression
 
-public class Expression <L: LeftHandSideArgument, R: RightHandSideArgument> {
-	private let lhs: L
+public class Expression <Left: LeftHandSideArgument, Right: RightHandSideArgument> {
+	private let lhs: Left
 	private let relation: NSLayoutRelation
-	private let rhs: R
+	private let rhs: Right
 	private let priority: Priority?
 
-	init(lhs: L, relation: NSLayoutRelation, rhs: R, priority: Priority? = nil) {
+	init(lhs: Left, relation: NSLayoutRelation, rhs: Right, priority: Priority? = nil) {
 		self.lhs = lhs
 		self.relation = relation
 		self.rhs = rhs

	precedence 125 // Less than the Comparative operators (130)
}

public func <~ <L: LeftHandSideArgument, R: RightHandSideArgument>(expression: Expression<L, R>, priority: SystemPriority) -> Expression<L, R> {
	return expression.updatePriority(priority.rawValue)
}

public func <~ <L: LeftHandSideArgument, R: RightHandSideArgument>(expression: Expression<L, R>, priority: Priority) -> Expression<L, R> {
	return expression.updatePriority(priority)
}


/// Evaluates a layout expression into constraints.
///
/// Returns an array of layout constraints.
public func evaluateExpression<Left: LeftHandSideArgument, Right: RightHandSideArgument>(expression: Expression<Left, Right>) -> [NSLayoutConstraint] {
	return evaluateExpressions([ expression ])
}

/// Evaluates multiple layout expressions into constraints.
///
/// Returns an array of layout constraints.
public func evaluateExpressions<Left: LeftHandSideArgument, Right: RightHandSideArgument>(expressions: [Expression<Left, Right>]) -> [NSLayoutConstraint] {
	var constraints = [NSLayoutConstraint]()
	for expr in expressions {
		constraints += expr.evaluate()
