With parametric polymorphism and generalized algebraic data types, you could:<p>(0) Give every process in the pipeline could its own input and output type, rather than forcing all processes to use strings.<p>(1) Enforce, statically, that only &quot;compatible&quot; processes can be composed. For instance, if `Foo` is a process that outputs integers, and `Bar` is another process that takes strings as input, then `Foo` can&#x27;t feed its output to `Bar`.<p>However, this is involves some rather tricky type hackery (so-called &quot;type-aligned sequences&quot;). Hardly a good fit for a language with Go&#x27;s design goals.