 
     private var includedEdges = LayoutEdge.All
 
-    private init(top: NSLayoutYAxisAnchor, leading: NSLayoutXAxisAnchor, bottom: NSLayoutYAxisAnchor, trailing: NSLayoutXAxisAnchor) {
+    fileprivate init(top: NSLayoutYAxisAnchor, leading: NSLayoutXAxisAnchor, bottom: NSLayoutYAxisAnchor, trailing: NSLayoutXAxisAnchor) {
         self.top = top
         self.leading = leading
         self.bottom = bottom
         self.trailing = trailing
     }
 
-    private func filter(_ filter: [LayoutEdge]) -> EdgeAnchors {
+    fileprivate func filter(_ filter: [LayoutEdge]) -> EdgeAnchors {
         var filteredAnchors = self
         filteredAnchors.includedEdges = includedEdges.filter { filter.contains($0) }
 


public struct LayoutExpression<T : LayoutAnchorType> {

    private var anchor: T?
    private var constant: CGFloat
    private var multiplier: CGFloat
    private var priority: UILayoutPriority

    private init(anchor: T? = nil, constant: CGFloat = 0.0, multiplier: CGFloat = 1.0, priority: UILayoutPriority = UILayoutPriorityRequired) {
        self.anchor = anchor
        self.constant = constant
        self.multiplier = multiplier

        return [top, leading, bottom, trailing].flatMap { $0 }
    }

    fileprivate subscript (edge: LayoutEdge) -> NSLayoutConstraint? {
        get {
            switch edge {
            case .top:      return top
