  In this report, we present a new programming model based on Pipelines and
Operators, which are the building blocks of programs written in PiCo, a DSL for
Data Analytics Pipelines. In the model we propose, we use the term Pipeline to
denote a workflow that processes data collections -- rather than a
computational process -- as is common in the data processing community. The
novelty with respect to other frameworks is that all PiCo operators are
polymorphic with respect to data types. This makes it possible to 1) re-use the
same algorithms and pipelines on different data models (e.g., streams, lists,
sets, etc); 2) reuse the same operators in different contexts, and 3) update
operators without affecting the calling context, i.e., the previous and
following stages in the pipeline. Notice that in other mainstream frameworks,
such as Spark, the update of a pipeline by changing a transformation with
another is not necessarily trivial, since it may require the development of an
input and output proxy to adapt the new transformation for the calling context.
In the same line, we provide a formal framework (i.e., typing and semantics)
that characterizes programs from the perspective of how they transform the data
structures they process -- rather than the computational processes they
represent. This approach allows to reason about programs at an abstract level,
without taking into account any aspect from the underlying execution model or
implementation.
