     }
 }
 
-private func dereferencing(_ evaluator: @escaping BinaryEvaluator) -> BinaryEvaluator {
+fileprivate func dereferencing(_ evaluator: @escaping BinaryEvaluator) -> BinaryEvaluator {
     return { (formulitic, operand1, operand2, context) in
         let dereferenced1 = (operand1 as? Referencable)?.dereference(by: formulitic, with: context) ?? operand1
         if dereferenced1 is Errorable {

    }
}

private func unaryOperator(_ evaluator: @escaping UnaryEvaluator) -> Function {
    return { (formulitic, parameters, context) in
        if parameters.count != 1 {
            return ErrorValue.invalidArgumentCount

    return DoubleValue(number: result)
}))

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