class ConcatExpression implements Expression {

    @Override
    public ExpressionResult apply(ExpressionContext context, ExpressionResult input) {
        ListExpressionResult value = (ListExpressionResult)valueExpression.apply(context, input);
        if( value == null || ! value.isNonNull() ) return  NullExpressionResult.INSTANCE;

        String chars = charsExpression.apply(context, input).toString();

        String concatted = value.getValue().stream().map(String::valueOf).collect(Collectors.joining(chars));

        return new StringExpressionResult(concatted);
    }

    public  ConcatExpression(String alias, Expression[] expressions);

}