public static Func <IExpressionContext <T, ICell <T> >, IExpressionContext <T, ICell <T> > > Build <T>(ExpressionNodeBuilder <T> nodeBuilder, Func <IExpressionContext <T, ICell <T> >, IExpressionContext <T, ICell <T> > > functor)
            where T : struct, IComparable
        {
            // to do extra functions
            switch (nodeBuilder.Operation)
            {
            case OperationType.SUM:
                return(Sum(functor, nodeBuilder.Picker));

            case OperationType.SUBTRACTION:
                return(Subtraction(functor, nodeBuilder.Picker));

            case OperationType.MULTIPLICATION:
                return(Multiplication(functor, nodeBuilder.Picker));

            case OperationType.DIVISION:
                return(Division(functor, nodeBuilder.Picker));

            default:
                throw new Exception("Operation is not supported.");
            }
        }
        public static Func <IExpressionContext <T, ICell <T> >, IExpressionContext <T, ICell <T> > > Build <T>(ExpressionNodeBuilder <T> nodeBuilder)
            where T : struct, IComparable
        {
            switch (nodeBuilder.Operation)
            {
            case OperationType.SUM:
                return(Sum(nodeBuilder.ScalarValue, nodeBuilder.Picker));

            case OperationType.SUBTRACTION:
                return(Subtraction(nodeBuilder.ScalarValue, nodeBuilder.Picker));

            case OperationType.MULTIPLICATION:
                return(Multiplication(nodeBuilder.ScalarValue, nodeBuilder.Picker));

            case OperationType.DIVISION:
                return(Division(nodeBuilder.ScalarValue, nodeBuilder.Picker));

            case OperationType.VALUE:
                return(Value(nodeBuilder.Picker));

            case OperationType.AVERAGE:
                return(Average(nodeBuilder.Picker));

            case OperationType.MAX:
                return(Max(nodeBuilder.Picker));

            case OperationType.MIN:
                return(Min(nodeBuilder.Picker));

            default:
                throw new Exception("Operation is not supported.");
            }
        }