                                relation: .LessThanOrEqual)
 }
 
-
+/**
+ Handle the concept of allowing several attributes to join with a tuple
+ e.g:
+
+ [view1, view2, view3, view4].m_size |=| (50, 50)
+
+*/
 public func |=|(lhs: [MortarAttributable], rhs: MortarTuple) -> MortarConstraint {
     return MortarConstraint(targetArray: lhs.map { $0.m_intoAttribute() },
                             sourceTuple: rhs,

    return lhs |<| MortarConvertFourple(rhs)
}


public func |=|(lhs: [Any], rhs: [Any]) -> MortarConstraint {
    return MortarConstraint(targetAnyArray: lhs, sourceAnyArray: rhs, crosslink: false, relation: .Equal)
}

}


/**
 Handle constraints involving arrays
 e.g:

 view1 |=| [view2.m_bottom, view3.m_left]

 [view1.m_top, view1.m_left] |=| [view2.m_bottom, view3.m_left]

*/
public func |=|(lhs: [MortarAttributable], rhs: [MortarAttributable]) -> MortarConstraint {
    return MortarConstraint(targetArray: lhs.map { $0.m_intoAttribute() },
                            sourceArray: rhs.map { $0.m_intoAttribute() },
