[38;5;12m                            [39m[38;2;255;187;0m[1m[4mAwesome Recursion Schemes [0m[38;5;14m[1m[4m![0m[38;2;255;187;0m[1m[4mAwesome[0m[38;5;14m[1m[4m (https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)[0m[38;2;255;187;0m[1m[4m (https://github.com/sindresorhus/awesome)[0m

[38;5;11m[1m▐[0m[38;5;12m [39m[38;5;12mA curation of useful resources for learning about and using recursion schemes.[39m

[38;5;12mRecursion schemes are simple, composable combinators, that automate the process of traversing and recursing through nested data structures.[39m


[38;2;255;187;0m[4mContents[0m

[38;5;12m- [39m[38;5;14m[1mIntroductions[0m[38;5;12m (#introductions)[39m
[38;5;12m- [39m[38;5;14m[1mArticles[0m[38;5;12m (#articles)[39m
[38;5;12m- [39m[38;5;14m[1mPapers[0m[38;5;12m (#papers)[39m
[38;5;12m- [39m[38;5;14m[1mPresentations[0m[38;5;12m (#presentations)[39m
[38;5;12m- [39m[38;5;14m[1mCheat Sheets[0m[38;5;12m (#cheat-sheets)[39m
[38;5;12m- [39m[38;5;14m[1mPodcasts[0m[38;5;12m (#podcasts)[39m
[38;5;12m- [39m[38;5;14m[1mImplementations[0m[38;5;12m (#implementations)[39m


[38;2;255;187;0m[4mIntroductions[0m

[38;5;12m- [39m[38;5;14m[1mAwesome Recursion Schemes[0m[38;5;12m (https://github.com/passy/awesome-recursion-schemes) - A curation of useful resources for learning about and using recursion schemes.[39m
[38;5;12m- [39m[38;5;14m[1mPractical Recursion Schemes[0m[38;5;12m (https://jtobin.io/practical-recursion-schemes) -[39m
[38;5;12m  Introduction to pattern functors, fix points, anamorphisms, catamorphisms,[39m
[38;5;12m  paramorphisms and hylomorphisms, requiring very little prior knowledge.[39m
[38;5;12m- [39m[38;5;14m[1mAn Introduction to Recursion Schemes[0m[38;5;12m (http://blog.sumtypeofway.com/an-introduction-to-recursion-schemes/) -[39m
[38;5;12m  Three-part series in which you discover recursion schemes from scratch and[39m
[38;5;12m  implement a small subset of Edward Kmett's library.[39m
[38;5;12m- [39m[38;5;14m[1mUnderstanding Algebras[0m[38;5;12m (https://www.schoolofhaskell.com/user/bartosz/understanding-algebras) -[39m
[38;5;12m  Bartosz Milewski explains F-algebras and shows how to use them in the context of[39m
[38;5;12m  catamorphisms.[39m
[38;5;12m- [39m[38;5;14m[1mRecursion Schemes in JavaScript and Flow[0m[38;5;12m (https://medium.com/@JosephJnk/recursion-schemes-in-javascript-and-flow-with-static-land-recursision-schemes-97cf10599fb7) -[39m
[38;5;12m  Series introducing recursion schemes and related concepts in JavaScript,[39m
[38;5;12m  aimed at developers with a minimal functional programming background.[39m

[38;2;255;187;0m[4mArticles[0m

[38;5;12m- [39m[38;5;14m[1mRecursion Schemes: A Field Guide (Redux)[0m[38;5;12m (http://comonad.com/reader/2009/recursion-schemes/) -[39m
[38;5;12m  List of various recursion schemes with code samples.[39m
[38;5;12m- [39m[38;5;14m[1mCatamorphisms[0m[38;5;12m (https://wiki.haskell.org/Catamorphisms) - Definition on the Haskell Wiki.[39m
[38;5;12m- [39m[38;5;14m[1mCatamorphisms[0m[38;5;12m (https://www.schoolofhaskell.com/user/edwardk/recursion-schemes/catamorphisms) -[39m
[38;5;12m  Short definition with code on School of Haskell by Edward Kmett.[39m
[38;5;12m- [39m[38;5;14m[1mRotating Squares[0m[38;5;12m (https://jtobin.io/rotating-squares) - Using a hylomorphism to rotate a quadtree by Jared Tobin.[39m
[38;5;12m- [39m[38;5;14m[1mRecursion Schemes, Part V: Hello, Hylomorphisms[0m[38;5;12m (http://blog.sumtypeofway.com/recursion-schemes-part-v/)[39m
[38;5;12m- [39m[38;5;14m[1mPromorphisms, Pre and Post[0m[38;5;12m (https://jtobin.io/promorphisms-pre-post) - Practical examples of pre- and postpromorphisms by Jared Tobin.[39m
[38;5;12m- [39m[38;5;14m[1mTime Traveling Recursion Schemes[0m[38;5;12m (https://jtobin.io/time-traveling-recursion) - Exploring histo and futu by example by Jared Tobin.[39m
[38;5;12m- [39m[38;5;14m[1mRecursion Schemes, Part IV: Time is of the Essence[0m[38;5;12m (http://blog.sumtypeofway.com/recursion-schemes-part-iv-time-is-of-the-essence/) - Practical article about histomorphism and the futumorphism.[39m
[38;5;12m- [39m[38;5;14m[1mCheat Sheet[0m[38;5;12m (https://github.com/sellout/recursion-scheme-talk/blob/master/cheat%20sheet.pdf) - Map of various recursion schemes and their duals.[39m
[38;5;12m- [39m[38;5;14m[1mCorrecting the Visitor pattern[0m[38;5;12m (http://logji.blogspot.co.uk/2012/02/correcting-visitor-pattern.html) - Showing that the Visitor pattern implements an f-algebra for use with a catamorphism (in Java).[39m
[38;5;12m- [39m[38;5;14m[1mRecursion Schemes in Scala[0m[38;5;12m (https://free.cofree.io/2017/11/13/recursion/) - Introduces the fixpoint combinator, anamorphism, catamorphism, hylomorphism, paramorphism, apomorphism, histomorphism, dynamorphism and futumorphism.[39m
[38;5;12m- [39m[38;5;14m[1mWhat's in a Fold: The Basic Catamorphism in recursion-schemes[0m[38;5;12m (https://duplode.github.io/posts/whats-in-a-fold.html) - Introduces catamorphism as a generalization of fold.[39m

[38;2;255;187;0m[4mHylomorphisms in the Wild[0m

[38;5;12mArticles by Bartosz Milewski about solving small, practical problems by applying a hylomorphism.[39m

[38;5;12m- [39m[38;5;14m[1mStalking a Hylomorphism in the Wild[0m[38;5;12m (https://bartoszmilewski.com/2017/12/29/stalking-a-hylomorphism-in-the-wild/) - Advent of Code 2017, Domino challenge[39m
[38;5;12m- [39m[38;5;14m[1mOpen Seasons on Hylomorphisms[0m[38;5;12m (https://bartoszmilewski.com/2018/12/20/open-season-on-hylomorphisms/) - Advent of Code 2018, String comparison challenge[39m

[38;2;255;187;0m[4mPapers[0m

[38;5;12m- [39m[38;5;14m[1mFunctional Programming with Bananas, Lenses, Envelopes and Barbed Wire, 1991, Meijer et al.[0m[38;5;12m (http://maartenfokkinga.github.io/utwente/mmf91m.pdf) -[39m
[38;5;12m  The original paper most of this is based on.[39m
[38;5;12m- [39m[38;5;14m[1mA Duality of Sorts, 2013, Hinze et al.[0m[38;5;12m (http://www.cs.ox.ac.uk/ralf.hinze/publications/Sorting.pdf) -[39m
[38;5;12m  Shows that many basic sorting algorithms exist as a pair, and that these pairs[39m
[38;5;12m  arise naturally out of the duality between folds and unfolds.[39m
[38;5;12m- [39m[38;5;14m[1mSorting with Bialgebras and Distributive Laws, 2012, Hinze et al.[0m[38;5;12m (http://www.cs.ox.ac.uk/people/daniel.james/sorting/sorting.pdf) -[39m
[38;5;12m  Shows how paramorphisms and apomorphisms can be used for more efficient[39m
[38;5;12m  implementations of sorting algorithms.[39m
[38;5;12m- [39m[38;5;14m[1mScrap your boilerplate: a practical design pattern for generic programming, 2003, SPJ et al.[0m[38;5;12m (http://research.microsoft.com/en-us/um/people/simonpj/Papers/hmap/hmap.ps) -[39m
[38;5;12m  Design pattern for writing programs that traverse data structures built from rich mutually-recursive data types.[39m

[38;2;255;187;0m[4mPresentations[0m

[38;5;12m- [39m[38;5;14m[1mSlidedecks by Tim Philip Williams[0m[38;5;12m (http://www.timphilipwilliams.com/slides.html) -[39m
[38;5;12m  "Recursion Schemes by Example" and "Exotic Tools for Exotic Trades" provide[39m
[38;5;12m  concise definitions as well as practical examples of many recursion schemes.[39m
[38;5;12m- [39m[38;5;14m[1mUnifying Structured Recursion Schemes[0m[38;5;12m (https://www.youtube.com/watch?v=9EGYSb9vov8) -[39m
[38;5;12m  12 min presentation by Ralf Hinze, Nicolas Wu, and Jeremy Gibbons.[39m
[38;5;12m- [39m[38;5;14m[1mRecursion Schemes[0m[38;5;12m (https://www.youtube.com/watch?v=Zw9KeP3OzpU) -[39m
[38;5;12m  Presented by Tim Williams at the London Haskell meetup.[39m
[38;5;12m- [39m[38;5;14m[1mF-algebras or: How I Learned to Stop Worrying and Love the Type System[0m[38;5;12m (https://www.youtube.com/watch?v=PK4SOaAGVfg) -[39m
[38;5;12m  Presented by Anthony Burzillo at the NYC Haskell User's Group.[39m
[38;5;12m- [39m[38;5;14m[1mA Gentle Introduction to Recursion Schemes[0m[38;5;12m (https://www.youtube.com/watch?v=i5A2Amfcir8) -[39m
[38;5;12m  Presented by Jean Remi Desjardins at Lambdaconf 2016.[39m
[38;5;12m- [39m[38;5;14m[1mrecursion-scheme-talk[0m[38;5;12m (https://github.com/sellout/recursion-scheme-talk) - Collection of slide decks about recursion schemes.[39m
[38;5;12m- [39m[38;5;14m[1mBracer: Transforming Real-World Languages with Coproducts and Recursion Schemes[0m[38;5;12m (https://www.youtube.com/watch?v=5Kr7IykGMzU) - High-level talk about structuring programs with coproducts and recursion schemes by Patrick Thomson.[39m
[38;5;12m- [39m[38;5;14m[1mRecursion: Where Functional Programming Hits Bottom[0m[38;5;12m (https://www.youtube.com/watch?v=24UoRaoKLjM) - Introduction to recursive fix point data structures and recursion schemes in Haskell and Scala by Greg Pfeil.[39m
[38;5;12m- [39m[38;5;14m[1mProgramming with algebras[0m[38;5;12m (https://www.youtube.com/watch?v=-98fR9VmLbQ) - Bartosz Milewski's article in talk form, presented at LambdaCon.[39m
[38;5;12m- [39m[38;5;14m[1mPeeling the Banana: Recursion Schemes from First Principles[0m[38;5;12m (https://www.youtube.com/watch?v=XZ9nPZbaYfE&t=3s) - Zainab Ali's Introductory talk presented at LambdaWorld.[39m

[38;2;255;187;0m[4mCheat Sheets[0m

[38;5;12m- [39m[38;5;14m[1mThe Hitchhiker's Guide to Morphisms[0m[38;5;12m (https://ipfs.io/ipfs/QmTppu1VDAQWsdiyVSZX6qb8PErdpwzNP2oKfEhcgaBvWR/guide-to-morphisms.pdf) - Overview of different morphisms including a printable PDF.[39m

[38;2;255;187;0m[4mPodcasts[0m

[38;5;12m- [39m[38;5;14m[1mMagic Read Along[0m[38;5;12m (http://www.magicreadalong.com/) - Casual discussions about[39m
[38;5;12m  category theory that often bring up recursion schemes, including [39m[38;5;14m[1mepisode[0m
[38;5;12m  33[39m[38;5;14m[1m (http://www.magicreadalong.com/episode/33) which talks about Histomorphisms[0m
[38;5;12m  and Futumorphisms.[39m
[38;5;12m- [39m[38;5;14m[1mScala Love[0m[38;5;12m (https://scala.love/) - Podcast about Scala that brings up[39m
[38;5;12m  recursion schemes in [39m[38;5;14m[1mthe second episode[0m[38;5;12m (https://scala.love/happy-valentin/).[39m
[38;5;12m- [39m[38;5;14m[1mThe Haskell Cast[0m[38;5;12m (https://www.haskellcast.com/) - Recursion schemes come up in[39m
[38;5;12m  [39m[38;5;14m[1mEpisode 13 with John Wiegley[0m[38;5;12m (https://www.haskellcast.com/episode/013-john-wiegley-on-categories-and-compilers).[39m

[38;2;255;187;0m[4mImplementations[0m

[38;5;12m- [39m[38;5;14m[1mrecursion-schemes[0m[38;5;12m (https://github.com/ekmett/recursion-schemes/) for[39m
[38;5;12m  Haskell - The canonical implementation by Edward Kmett.[39m
[38;5;12m- [39m[38;5;14m[1mMatryoshka[0m[38;5;12m (https://github.com/slamdata/matryoshka) for Scala using Scalaz -[39m
[38;5;12m  Generalized folds, unfolds, and traversals for fixed point data structures.[39m
[38;5;12m- [39m[38;5;14m[1mandyscott/droste[0m[38;5;12m (https://github.com/andyscott/droste) for Scala using Cats -[39m
[38;5;12m  Generalized folds, unfolds, and traversals for fixed point data structures.[39m
[38;5;12m- [39m[38;5;14m[1mrecursion\_schemes[0m[38;5;12m (https://github.com/vmchale/recursion_schemes/) for[39m
[38;5;12m  Idris, based off Edward Kmett's Haskell library.[39m
[38;5;12m- [39m[38;5;14m[1mpurescript-matryoshka[0m[38;5;12m (https://github.com/slamdata/purescript-matryoshka) for PureScript -[39m
[38;5;12m  Work-in-process port of matryoshka.[39m
[38;5;12m- [39m[38;5;14m[1mrecursion[0m[38;5;12m (https://github.com/vmchale/recursion) for ATS - Demonstration of[39m
[38;5;12m  recursion schemes in ATS.[39m
[38;5;12m- [39m[38;5;14m[1mdada[0m[38;5;12m (https://github.com/sellout/dada) for Dhall - a library for recursion[39m
[38;5;12m  schemes in Dhall.[39m
[38;5;12m- [39m[38;5;14m[1mstatic-land-recursion-schemes[0m[38;5;12m (https://github.com/JosephJNK/static-land-recursion-schemes) for JavaScript/Flow -[39m
[38;5;12m  Schemes for data structures written in the style of [39m[38;5;14m[1mflow-static-land[0m[38;5;12m (https://github.com/gcanti/flow-static-land).[39m
[38;5;12m- [39m[38;5;14m[1mKatalyst[0m[38;5;12m (https://github.com/aedans/Katalyst) for Kotlin - a re-envisioning based off Matryoshka using lightweight higher kinded polymorphism.[39m

[38;2;255;187;0m[4mLicense[0m

[38;5;12mThis content is licensed[39m
[38;5;12munder [39m[38;5;14m[1mCC0[0m[38;5;12m (https://creativecommons.org/publicdomain/zero/1.0/).[39m
