class OperationChain implements Output<OUT>,
        Operations<Operation> {

    @JsonIgnore
    @Override
    public TypeReference<OUT> getOutputTypeReference() {
        if (!operations.isEmpty()) {
            final Operation lastOp = operations.get(operations.size() - 1);
            if (lastOp instanceof Output) {
                return ((Output) lastOp).getOutputTypeReference();
            }
        }

        return (TypeReference<OUT>) new TypeReferenceImpl.Void();
    }

    public  OperationChain();
    public  OperationChain(final Operation operation);
    public  OperationChain(final Output<OUT> operation);
    public  OperationChain(final Operation... operations);
    public  OperationChain(final List<Operation> operations);
    public  OperationChain(final List<Operation> operations, final boolean flatten);

}