    Constraints the view to its parent according to the provided attribute.
    If the constraint already exists, will update its constant.
    - Parameter _ attribute: A LayoutAttribute.
+   - Parameter _ relationer: A LayoutRelationer.
    - Parameter constant: A CGFloat.
    - Returns: A Layout instance to allow chaining.
    */
-  func constraint(_ attribute: LayoutAttribute, constant: CGFloat, useSafeArea: Bool = false) -> Layout {
-    return constraint([attribute], constants: constant, useSafeArea: useSafeArea)
+  func constraint(_ attribute: LayoutAttribute, relationer: LayoutRelationer = LayoutRelationerStruct.equal, constant: CGFloat, useSafeArea: Bool = false) -> Layout {
+    return constraint([attribute], relationer: relationer, constants: constant, useSafeArea: useSafeArea)
   }
   
   /**
    Constraints the view to its parent according to the provided attributes.
    If any of the constraints already exists, will update its constant.
    - Parameter _ attributes: An array of LayoutAttribute.
+   - Parameter _ relationer: A LayoutRelationer.
    - Parameter constants: A list of CGFloat.
    - Returns: A Layout instance to allow chaining.
    */
-  func constraint(_ attributes: [LayoutAttribute], constants: CGFloat..., useSafeArea: Bool = false) -> Layout {
+  func constraint(_ attributes: [LayoutAttribute], relationer: LayoutRelationer = LayoutRelationerStruct.equal, constants: CGFloat..., useSafeArea: Bool = false) -> Layout {
     var attributes = attributes
     var anchor: LayoutAnchor!
     

  /**
   Constraints top of the view to its parent's.
   - Parameter _ offset: A CGFloat offset.
   - Returns: A Layout instance to allow chaining.
   */
  @discardableResult
  func top(_ offset: CGFloat = 0) -> Layout {
    return constraint(.top, constant: offset)
  }
  
  /**
   Constraints left of the view to its parent's.
   - Parameter _ offset: A CGFloat offset.
   - Returns: A Layout instance to allow chaining.
   */
  @discardableResult
  func left(_ offset: CGFloat = 0) -> Layout {
    return constraint(.left, constant: offset)
  }
  
  /**
   Constraints right of the view to its parent.
   - Parameter _ offset: A CGFloat offset.
   - Returns: A Layout instance to allow chaining.
   */
  @discardableResult
  func right(_ offset: CGFloat = 0) -> Layout {
    return constraint(.right, constant: -offset)
  }
  
  /**
   Constraints leading of the view to its parent's.
   - Parameter _ offset: A CGFloat offset.
   - Returns: A Layout instance to allow chaining.
   */
  @discardableResult
  func leading(_ offset: CGFloat = 0) -> Layout {
    return constraint(.leading, constant: offset)
  }
  
  /**
   Constraints trailing of the view to its parent.
   - Parameter _ offset: A CGFloat offset.
   - Returns: A Layout instance to allow chaining.
   */
  @discardableResult
  func trailing(_ offset: CGFloat = 0) -> Layout {
    return constraint(.trailing, constant: -offset)
  }
  
  /**
   Constraints bottom of the view to its parent's.
   - Parameter _ offset: A CGFloat offset.
   - Returns: A Layout instance to allow chaining.
   */
  @discardableResult
  func bottom(_ offset: CGFloat = 0) -> Layout {
    return constraint(.bottom, constant: -offset)
  }
  
  /**

    return self
  }
}

/// A closure typealias for relation operators.
public typealias LayoutRelationer = (LayoutRelationerStruct, LayoutRelationerStruct) -> LayoutRelation

/// A dummy struct used in creating relation operators (==, >=, <=).
public struct LayoutRelationerStruct {
  /// Passed as an unused argument to the LayoutRelationer closures.
  static let `nil` = LayoutRelationerStruct()
  
  /**
   A method used as a default parameter for LayoutRelationer closures.
   Swift does not allow using == operator directly, so we had to create this.
   */
  public static func equal(left: LayoutRelationerStruct, right: LayoutRelationerStruct) -> LayoutRelation {
    return .equal
  }
}

/// A method returning `LayoutRelation.equal`
public func ==(left: LayoutRelationerStruct, right: LayoutRelationerStruct) -> LayoutRelation {
  return .equal
}

/// A method returning `LayoutRelation.greaterThanOrEqual`
public func >=(left: LayoutRelationerStruct, right: LayoutRelationerStruct) -> LayoutRelation {
  return .greaterThanOrEqual
}

/// A method returning `LayoutRelation.lessThanOrEqual`
public func <=(left: LayoutRelationerStruct, right: LayoutRelationerStruct) -> LayoutRelation {
  return .lessThanOrEqual
}

