Introduction Haskell’s pipes library enables the construction of effectful stream processing pipelines from modular components. A pipeline is composed of stages that themselves comprise actions. This article examines the co-routine design pattern that co-ordinates actions distributed within and across pipeline stages and concludes by reducing a sample pipeline in terms of the underlying Proxy data