 /// Evaluates a distinct layout expression into a single constraint.
 ///
 /// Returns an evaluated NSLayoutConstraint
-public func evaluateExpression<L: DistinctLeftHandSideArgument, R: DistinctRightHandSideArgument>(expression: Expression<L, R>) -> NSLayoutConstraint {
+public func evaluateExpression<Left: DistinctLeftHandSideArgument, Right: DistinctRightHandSideArgument>(expression: Expression<Left, Right>) -> NSLayoutConstraint {
 	let constraints = expression.evaluate()
 	assert(constraints.count == 1, "A distinct expression should never evaluate to more than 1 layout constraint.")
 	return constraints[0]

	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)
}


		for leftAttribute in lhs.leftHandSideAttributes {
			let values = rhs.rightHandSideValues(leftAttribute)
			let c = NSLayoutConstraint(item: lhs.leftHandSideItem,
			                      attribute: leftAttribute,
			                      relatedBy: relation,
			                         toItem: values.item,
			                      attribute: values.attribute,
			                     multiplier: values.multiplier ?? 1.0,
			                       constant: values.constant ?? 0.0)
			constraints.append(c)
		}
