     }))
 }
 
-private let equalTo = comparisonOperator { $0 == 0 }
-private let notEqualTo = comparisonOperator { $0 != 0 }
-private let lessThan = comparisonOperator { $0 < 0 }
-private let lessThanOrEqualTo = comparisonOperator { $0 <= 0 }
-private let greaterThan = comparisonOperator { $0 > 0 }
-private let greaterThanOrEqualTo = comparisonOperator { $0 >= 0 }
-
-private let add = binaryOperator(dereferencing({ (formulitic, operand1, operand2, context) in
+fileprivate let equalTo = comparisonOperator { $0 == 0 }
+fileprivate let notEqualTo = comparisonOperator { $0 != 0 }
+fileprivate let lessThan = comparisonOperator { $0 < 0 }
+fileprivate let lessThanOrEqualTo = comparisonOperator { $0 <= 0 }
+fileprivate let greaterThan = comparisonOperator { $0 > 0 }
+fileprivate let greaterThanOrEqualTo = comparisonOperator { $0 >= 0 }
+
+fileprivate let add = binaryOperator(dereferencing({ (formulitic, operand1, operand2, context) in
     let numerableValue1 = operand1.cast(to: .numerable, context: context)
     if numerableValue1 is Errorable {
         return numerableValue1

    return DoubleValue(number: result)
}))

private let subtract = binaryOperator(dereferencing({ (formulitic, operand1, operand2, context) in
    let numerableValue1 = operand1.cast(to: .numerable, context: context)
    if numerableValue1 is Errorable {
        return numerableValue1

    }
}

fileprivate func dereferencing(_ evaluator: @escaping UnaryEvaluator) -> UnaryEvaluator {
    return { (formulitic, operand, context) in
        let dereferenced = (operand as? Referencable)?.dereference(by: formulitic, with: context) ?? operand
        if dereferenced is Errorable {
