{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:57Z","timestamp":1779836757567,"version":"3.53.1"},"reference-count":30,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2020,8,3]],"date-time":"2020-08-03T00:00:00Z","timestamp":1596412800000},"content-version":"unspecified","delay-in-days":215,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2020]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    The three-continuation approach to coroutine pipelines efficiently represents a large number of connected components. Previous work in this area introduces this alternative encoding but does not shed much light on the underlying principles for deriving this encoding from its specification. This paper gives this missing insight by deriving the three-continuation encoding based on eliminating the mutual recursion in the definition of the connect operation. Using the same derivation steps, we are able to derive a similar encoding for a more general setting, namely bidirectional pipes. Additionally, we evaluate the encoding in an advertisement analytics benchmark where it is as performant as\n                    <jats:monospace>pipes<\/jats:monospace>\n                    ,\n                    <jats:monospace>conduit<\/jats:monospace>\n                    , and\n                    <jats:monospace>streamly<\/jats:monospace>\n                    , which are other common Haskell stream processing libraries.\n                  <\/jats:p>","DOI":"10.1017\/s0956796820000192","type":"journal-article","created":{"date-parts":[[2020,8,3]],"date-time":"2020-08-03T05:13:01Z","timestamp":1596431581000},"source":"Crossref","is-referenced-by-count":0,"title":["Faster coroutine pipelines: A reconstruction"],"prefix":"10.1017","volume":"30","author":[{"ORCID":"https:\/\/orcid.org\/0000-0003-0537-9403","authenticated-orcid":false,"given":"RUBEN P.","family":"PIETERS","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"TOM","family":"SCHRIJVERS","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2020,8,3]]},"reference":[{"key":"S0956796820000192_ref28","doi-asserted-by":"publisher","DOI":"10.1145\/3110249"},{"key":"S0956796820000192_ref22","unstructured":"Pieters, R. P. (2018a) Faster Coroutine Pipelines: A Reconstruction, Benchmarking Code. https:\/\/github.com\/rubenpieters\/orth-pipes-bench."},{"key":"S0956796820000192_ref4","volume-title":"The Calculi of Lambda-Conversion","author":"Church","year":"1941"},{"key":"S0956796820000192_ref16","unstructured":"Kumar, H. (2017) Haskell Streamly Library. http:\/\/hackage.haskell.org\/package\/streamly."},{"key":"S0956796820000192_ref17","unstructured":"Kumar, H. (2018) Streamly Benchmarks. https:\/\/github.com\/composewell\/streaming-benchmarks."},{"key":"S0956796820000192_ref10","doi-asserted-by":"publisher","DOI":"10.1145\/165180.165214"},{"key":"S0956796820000192_ref20","unstructured":"O\u2019Sullivan, B. (2009) Haskell Criterion Library. http:\/\/hackage.haskell.org\/package\/criterion."},{"key":"S0956796820000192_ref27","unstructured":"Snoyman, M. (2011) Haskell Conduit Library. http:\/\/hackage.haskell.org\/package\/conduit."},{"key":"S0956796820000192_ref12","unstructured":"Gonzalez, G. (2014) Stream Fusion for Pipes. http:\/\/haskellforall.com\/2014\/01\/stream-fusion-for-pipes.html."},{"key":"S0956796820000192_ref6","doi-asserted-by":"crossref","first-page":"135","DOI":"10.1016\/0304-3975(85)90135-5","article-title":"Automatic synthesis of typed lambda-programs on term algebras","volume":"39","author":"Corrado","year":"1985","journal-title":"Theor. Comput. Sci."},{"key":"S0956796820000192_ref29","doi-asserted-by":"crossref","unstructured":"Svenningsson, J. (2002) Shortcut fusion for accumulating parameters & zip-like functions. In Proceedings of the Seventh ACM SIGPLAN International Conference on Functional Programming (ICFP\u201902), Pittsburgh, Pennsylvania, USA, October 4\u20136, 2002, pp. 124\u2013132.","DOI":"10.1145\/581478.581491"},{"key":"S0956796820000192_ref5","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796804005192"},{"key":"S0956796820000192_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009897"},{"key":"S0956796820000192_ref23","unstructured":"Pieters, R. P. (2018b) Faster Coroutine Pipelines: A Reconstruction, Library. https:\/\/github.com\/rubenpieters\/Orthogonal-Pipes."},{"key":"S0956796820000192_ref1","doi-asserted-by":"publisher","DOI":"10.1145\/3242744.3242746"},{"key":"S0956796820000192_ref26","doi-asserted-by":"publisher","DOI":"10.1145\/1133981.1134016"},{"key":"S0956796820000192_ref24","first-page":"133","author":"Pieters","year":"2019"},{"key":"S0956796820000192_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/2500365.2500590"},{"key":"S0956796820000192_ref9","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-30477-7_22"},{"key":"S0956796820000192_ref19","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800000423"},{"key":"S0956796820000192_ref13","doi-asserted-by":"publisher","DOI":"10.1145\/2528412"},{"key":"S0956796820000192_ref3","doi-asserted-by":"publisher","DOI":"10.1109\/IPDPSW.2016.138"},{"key":"S0956796820000192_ref30","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-70594-9_20"},{"key":"S0956796820000192_ref11","unstructured":"Gonzalez, G. (2012) Haskell Pipes Library. http:\/\/hackage.haskell.org\/package\/pipes."},{"key":"S0956796820000192_ref8","doi-asserted-by":"publisher","DOI":"10.2168\/LMCS-5(3:9)2009"},{"key":"S0956796820000192_ref15","doi-asserted-by":"publisher","DOI":"10.1145\/3009837.3009880"},{"key":"S0956796820000192_ref2","doi-asserted-by":"publisher","DOI":"10.1145\/3242744.3242748"},{"key":"S0956796820000192_ref7","unstructured":"Coutts, D. (2011) Stream Fusion: Practical Shortcut Fusion for Coinductive Sequence Types. PhD Thesis, UK: University of Oxford."},{"key":"S0956796820000192_ref21","unstructured":"Peyton Jones, S. L. , Tolmach, A. & Hoare, T. (2001) Playing by the rules: Rewriting as a practical optimisation technique in ghc. In 2001 Haskell Workshop."},{"key":"S0956796820000192_ref25","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0037118"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796820000192","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:52Z","timestamp":1779835012000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796820000192\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020]]},"references-count":30,"alternative-id":["S0956796820000192"],"URL":"https:\/\/doi.org\/10.1017\/s0956796820000192","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020]]},"article-number":"e22"}}