{"id":13730544,"url":"https://github.com/graninas/cpp_functional_programming","last_synced_at":"2025-09-02T20:51:42.389Z","repository":{"id":49951450,"uuid":"162331229","full_name":"graninas/cpp_functional_programming","owner":"graninas","description":"List of materials about functional programming in C++","archived":false,"fork":false,"pushed_at":"2020-06-27T05:32:41.000Z","size":177,"stargazers_count":666,"open_issues_count":1,"forks_count":63,"subscribers_count":39,"default_branch":"master","last_synced_at":"2025-03-06T00:56:36.574Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/graninas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-12-18T18:41:32.000Z","updated_at":"2025-03-05T23:28:44.000Z","dependencies_parsed_at":"2022-07-30T23:08:09.144Z","dependency_job_id":null,"html_url":"https://github.com/graninas/cpp_functional_programming","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graninas%2Fcpp_functional_programming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graninas%2Fcpp_functional_programming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graninas%2Fcpp_functional_programming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graninas%2Fcpp_functional_programming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graninas","download_url":"https://codeload.github.com/graninas/cpp_functional_programming/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243335382,"owners_count":20274898,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T02:01:16.360Z","updated_at":"2025-03-13T03:43:15.078Z","avatar_url":"https://github.com/graninas.png","language":null,"readme":"Functional Programming in C++\n=============================\n\nList of materials and links about functional programming in C++.\n\n[**English Materials**](#english-materials)\n\n- [Books](#books)\n- [Articles](#articles)\n  * [Basics](#basics)\n  * [Monads](#monads)\n  * [Design Concepts and Approaches](#design-concepts-and-approaches)\n- [Papers](#papers)\n- [Blogs](#blogs)\n- [Talks and Screencasts](#talks-and-screencasts)\n  * [Talks](#talks)\n  * [Screencasts](#screencasts)\n- [Cources](#cources)\n- [QA](#qa)\n  * [StackOverflow questions](#stackoverflow-questions) \n  * [Quora questions](#quora-questions)\n\n[**Russian Materials**](#russian-materials)\n\n- [Articles (Rus)](#articles-rus)\n  * [Basics (Rus)](#basics-rus)\n  * [Monads (Rus)](#monads-rus)\n  * [Design Concepts and Approaches (Rus)](#design-concepts-and-approaches-rus)\n- [Talks and Screencasts (Rus)](#talks-and-screencasts-rus)\n  * [Talks (Rus)](#talks-rus)\n\n[**Projects**](#projects)\n\n- [Libraries](#libraries)\n- [Showcase projects](#showcase-projects)\n\n[**Misc**](#misc)\n\n- [C++ FP Experts](#c-fp-experts)\n\n---\n\n# English Materials\n\n## Books\n\n- [Functional Programming in C++](https://www.manning.com/books/functional-programming-in-c-plus-plus), **Ivan Čukić**, Manning Publications, 2018\n- [Learning C++ Functional Programming](https://www.oreilly.com/library/view/learning-c-functional/9781787281974/), **Wisnu Anggoro**\n- [Functional Programming with C++](https://www.amazon.com/Functional-Programming-C-Chris-Weed-ebook/dp/B017AT4OMI), **Chris Weed**\n\n## Articles\n\n#### Basics\n\n- [Functional Programming Using C++ Templates (Part 1)](https://accu.org/index.php/journals/1422), **Stuart Golodetz**, 2007\n- [Functional Programming Using C++ Templates (Part 2)](https://accu.org/index.php/journals/1616), **Stuart Golodetz**, 2007\n- [What Does Haskell Have to Do with C++?](https://bartoszmilewski.com/2009/10/21/what-does-haskell-have-to-do-with-c/),  **Bartosz Milewski**, 2009\n- [In-depth: Functional programming in C++](https://www.gamasutra.com/view/news/169296/Indepth_Functional_programming_in_C.php), **John Carmack**, 2012\n- [Efficient Pure Functional Programming in C++ Using Move Semantics](https://blog.knatten.org/2012/11/02/efficient-pure-functional-programming-in-c-using-move-semantics/), **Anders Schau Knatten**, 2012\n- [The connection between C++ template metaprogramming and functional programming](http://www.tnkcs.inf.elte.hu/vedes/sinkovics_abel_ertekezes.pdf), **Abel Sinkovics**, 2013\n- [Functional Data Structures in C++: Lists](https://bartoszmilewski.com/2013/11/13/functional-data-structures-in-c-lists/), **Bartosz Milewski**, 2013\n- [Functional Data Structures and Concurrency in C++](https://bartoszmilewski.com/2013/12/10/functional-data-structures-and-concurrency-in-c/), **Bartosz Milewski**, 2013\n- [Study Notes: Functional Programming with C++](https://yongweiwu.wordpress.com/2014/12/07/study-notes-functional-programming-with-cplusplus/), **Yongwei**, 2014\n- [Functional programming in C++](http://blog.madhukaraphatak.com/functional-programming-in-c++/), **Madhukar**, 2014\n- [Make your functions functional](https://www.fluentcpp.com/2016/11/22/make-your-functions-functional/), **Jonathan Boccara**, 2016\n- [C++ is a Dynamic, Pure, Functional Programming Language](https://cloudalion.org/2016/09/08/c-is-a-dynamic-pure-functional-programming-language/), **brosenan**, 2016\n- [An Overview of Elements of Functional Programming in C++](https://community.idera.com/developer-tools/b/blog/posts/an-overview-of-elements-of-functional-programming-in-c), **Kiryll Shynharow**, 2017\n- [Functional programming in c++ by example](https://nikitablack.github.io/2017/03/23/Functional-programming-in-c-by-example.html), **nikitablack**, 2017\n  * [Functional programming in c++ by example (Rus)](https://habr.com/post/324518/), **nikitablack**, 2017\n- [Functional in C++17 and C++20](http://www.modernescpp.com/index.php/functional-in-c-17-and-c-20), **Rainer Grimm**, 2017\n- [Lambdas: The Functional Programming Companion of Modern C++](https://medium.com/@DakshHub/lambdas-the-companion-of-modern-c-b7dfd43b5abb), **Daksh**, 2018\n- [Functional Programming in C++](https://www.codeproject.com/Articles/1267996/Functional-Programming-in-Cplusplus), **MehreenTahir**, 2018\n- [Introduction to Functional programming in C++](http://www2.lawrence.edu/fast/GREGGJ/CMSC270/functional.html), ?, ?\n- [Lambda-style anonymous functions for C++ in less than 500 lines of code](http://matt.might.net/articles/lambda-style-anonymous-functions-from-c++-templates/), **Matthew Might**, ?\n- [8 essential patterns you should know about functional programming in C++14](https://nalaginrut.com/archives/2019/10/31/8%20essential%20patterns%20you%20should%20know%20about%20functional%20programming%20in%20c%2b%2b14), **Nala Ginrut**, 2019\n\n#### Monads\n\n- [A word on Haskell Monads and C++](http://newartisans.com/2010/07/a-word-on-haskell-monads-and-c/), **John Wiegley**, 2010\n- [Monads in C++](https://bartoszmilewski.com/2011/07/11/monads-in-c/), **Bartosz Milewski**, 2011\n- [Monadic parsing in C++](http://yapb-soc.blogspot.com/2012/11/monadic-parsing-in-c.html), **Scott Prager**, 2012\n- [An Attempt to Explain Monads in C++](https://izzys.casa/posts/an-attempt-to-explain-monads-in-cxx.html), **Isabella Muerte**, 2014\n- [Optional Types and Lightweight Continuation Passing in C++](https://izzys.casa/posts/optional-types-and-lightweight-continuation-passing-in-cxx.html), **Isabella Muerte**, 2014\n- [Monads in C++](http://www.modernescpp.com/index.php/monads-in-c), **Rainer Grimm**, 2017\n- [The Vector Monad in C++, Without the Ugly Stuff](http://www.fluentcpp.com/2017/07/14/the-vector-monad-in-c-without-the-ugly-stuff), **Jonathan Boccara**, 2017\n- [The Vector Monad in C++, Really Without the Ugly Stuff](https://medium.com/@barryrevzin/the-vector-monad-in-c-really-without-the-ugly-stuff-3112137db5d7), **Barry Revzin**, 2017\n- [Multiple error handling with the optional monad in C++](https://www.fluentcpp.com/2017/07/04/multiple-error-handling-with-the-optional-monad-in-c/), **Jonathan Boccara**, 2017\n- [Free Monads in C++](https://toby-allsopp.github.io/2016/10/12/free-monads-in-cpp.html), **Toby Allsopp**, 2016\n- [An Introduction to Monads for C++ Programmers](https://shellblade.net/programming/Functional%20Programming/monad.html), **ShellBlade**\n\n#### Design Concepts and Approaches\n\n- [compile-time iteration with C++20 lambdas](https://vittorioromeo.info/index/blog/cpp20_lambdas_compiletime_for.html), **Vittorio Romeo**, 2018\n- [Software Transactional Memory in C++: pure functional approach (Tutorial)](https://gist.github.com/graninas/c7e0a603f3a22c7e85daa4599bf92525), **Alexander Granin**, 2018\n\n## Papers\n- [Lambda expressions and closures for C++](http://www.stroustrup.com/N1968-lambda-expressions.pdf), **Jeremiah Willcock**, **Jaakko Järvi**, **John Freeman**, **Bjarne Stroustrup**, 2006\n- [C++ lambda expressions and closures](https://core.ac.uk/download/pdf/82307163.pdf), **Jaakko Järvi**, **John Freeman**, 2008\n- [Functional Style in C++: Closures, Late Binding, and Lambda Abstractions](http://okmij.org/ftp/cpp-digest/Functional-Cpp.html), ?, 1999\n- [A proposal to add lambda functions to the C++ standard](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1958.pdf), **Valentin Samko**, 2006\n- [Persistence for the Masses: RRB-Vectors in a Systems Language](https://public.sinusoid.es/misc/immer/immer-icfp17.pdf), **Juan Pedro Bolívar Puente**\n- [Constexpr Lambda](https://isocpp.org/files/papers/N4487.pdf), 2015\n- [C++ Monadic interface (Proposal P0650R2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0650r2.pdf), **Vicente J. Botet Escribá**, 2018\n- [Functional Concepts in C++](http://www.cs.nott.ac.uk/~psznhn/TFP2006/Papers/25-RaufBergerSetzer-FunctionalConceptsInC++.pdf), **Rose H. Abdul Rauf, Ulrich Berger, Anton Setzer**\n- [Functional Programming in C++](https://people.cs.umass.edu/~yannis/fc++/fc++.main.pdf), **Brian McNamara**, **Yannis Smaragdakis**\n- [Abbreviated Lambdas for Fun and Profit](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0573r1.html), 2017\n\n## Blogs\n\n- [Functional C++. Abusing the type system like never before. (Blog)](https://functionalcpp.wordpress.com/), ?\n  * [Function Traits](https://functionalcpp.wordpress.com/2013/08/05/function-traits/), 2013\n  * [Function Composition](https://functionalcpp.wordpress.com/2013/08/09/function-composition/), 2013\n  * [Continuation Passing Style](https://functionalcpp.wordpress.com/2013/11/19/continuation-passing-style/), 2013\n  * [Composing Continuations](https://functionalcpp.wordpress.com/2015/01/19/composing-continuations/), 2015\n  * And more...\n- [C++ Truths (Blog)](http://cpptruths.blogspot.com/), **Sumant Tambe**\n  * [Understanding Fold Expressions](http://cpptruths.blogspot.com/2016/12/understanding-fold-expressions.html), 2016\n  * [Folding Functions](http://cpptruths.blogspot.com/2016/12/folding-functions.html), 2016\n  * [Dependently-typed Curried printf in C++](http://cpptruths.blogspot.com/2016/11/dependently-typed-curried-printf.html?m=1), 2016\n  * [Folding Monadic Functions](http://cpptruths.blogspot.com/2017/01/folding-monadic-functions.html?m=1), 2017\n  * And more...\n\n## Talks and Screencasts\n\n#### Talks\n\n- **Bartosz Milewski** talks\n  * [Functional Patterns in C++, 1. Functors](https://www.youtube.com/watch?v=ph7qt0pkPkc), 2012\n  * [Functional Patterns in C++, 2. Currying, Applicative](https://www.youtube.com/watch?v=Hx9jojeBj6w), 2012\n  * [Functional Patterns in C++, 3. Async API, Monoid, Monad](https://www.youtube.com/watch?v=ozN6XxsAF84), 2012\n  * [Compile-Time/Run-Time Functional Programming in C++](https://www.youtube.com/watch?v=WtHWFoKf8o0), **Bartosz Milewski**, **Eric Niebler**, BoostCon, 2012\n  * [Haskell -- The Pseudocode Language for C++ Template Metaprogramming (Part 1)](https://www.youtube.com/watch?v=GjhsSzRtTGY), BoostCon, 2013\n  * [Haskell -- The Pseudocode Language for C++ Template Metaprogramming (Part 2)](https://www.youtube.com/watch?v=_uJMKxmoo68), BoostCon, 2013\n  * [Re-discovering monads in C++](https://youtu.be/tc8w8MbJQNs?t=13003), C++ User Group Novosibirsk, 2014\n  * [Functional techniques in C++](https://www.youtube.com/watch?v=olZ9SXeUmsU), CDays14, 2014\n  * [Categories for the Working C++ Programmer](https://www.youtube.com/watch?v=eCUfzvz7Z20), C++ Russia, 2015\n  * [Monads for C++](https://www.youtube.com/watch?v=vkcxgagQ4bM), itCppCon17, 2017\n\n- **Eric Niebler** talks\n  * [Compile-Time/Run-Time Functional Programming in C++](https://www.youtube.com/watch?v=WtHWFoKf8o0), **Bartosz Milewski**, **Eric Niebler**, BoostCon, 2012\n  * [Ranges for the Standard Library](https://www.youtube.com/watch?v=mFUXNMfaciE), CppCon, 2015\n  * [Ranges for the Standard Library](https://www.youtube.com/watch?v=gOKHcQad7xE), C++ Siberia, 2015\n  * [Keynote: Ranges for the Standard Library](https://www.youtube.com/watch?v=zsSErwT1S80), C++Now, 2015\n  * [STL Concepts and Ranges](https://www.youtube.com/watch?v=uXBcwcF3ln4), Northwest C++ Users Group, 2015\n  * [Introducing the Ranges TS](https://www.youtube.com/watch?v=LNXkPh3Z418), code::dive, 2017\n  \n- **Ivan Čukić** talks\n  * [Functional reactive programming in C++](https://www.youtube.com/watch?v=a2MmURgc6cU), Meeting C++, 2016\n  * [Functional Programming: data](https://www.youtube.com/watch?v=iYipZw4tS-A), Meeting C++, 2017\n  * [Atom Heart Monad: FRP in C++ (Keynote)](https://www.youtube.com/watch?v=udifvhJ-3B0), C++ Siberia, 2017\n  * [Atom Heart Monad: FRP in C++](https://www.youtube.com/watch?v=_Ji1HyZxXvo), Curry On!, 2018\n  * [New C++ features for writing DSLs](https://youtu.be/dpq3o6i1Cz8?t=460), C++ Siberia, 2019\n\n- **Juan Pedro Bolívar Puente** talks\n  * [Transducers: from Clojure to C++](https://www.youtube.com/watch?v=vohGJjGxtJQ), CppCon, 2015\n  * [Postmodern immutable data structures](https://www.youtube.com/watch?v=sPhpelUfu8Q), CppCon, 2017\n  * [Postmodern immutable data structures](https://www.youtube.com/watch?v=ZsryQp0UAC8), C++Now, 2017\n  * [Most valuable values](https://www.youtube.com/watch?v=_oBx_NbLghY), CppCon, 2018\n  * [Squaring the circle: value oriented design in an object oriented system](https://www.youtube.com/watch?v=e2-FRFEx8CA), C++ Russia Piter, 2019\n\n- **Phil Nash** talks\n  * [Functional C++ for Fun and Profit](https://www.youtube.com/watch?v=YgcUuYCCV14), **Phil Nash**, St. Petersburg C++ User Group, 2016\n  * [What Could Possibly Go Wrong?: A Tale of Expectations and Exceptions](https://www.youtube.com/watch?v=GC4cp4U2f2E), **Simon Brand**, **Phil Nash**, CppCon, 2018\n\n- **David Sankel** talks\n  * [Functional Programming in C++](https://www.youtube.com/watch?v=PVjaFMwV4x0), BoostCon, 2013\n  * [Intro to Functional Programming](https://www.youtube.com/watch?v=uHFUpFhWGJs), C++ Now, 2014\n  * [Functional Design Explained](https://www.youtube.com/watch?v=x9mIAT-CAwA), CppCon, 2015\n  * [The Mathematical Underpinnings of Promises in C++](https://www.youtube.com/watch?v=2OY0Zn3oBCE), BoostCon, 2017\n\n- [Practical Functional Programming in C++](https://channel9.msdn.com/Events/CPP/C-PP-Con-2014/009-Practical-Functional-Programming-in-CPP), **Bryce Adelstein-Lelbach**, CppCon, 2014\n- [Applying functional programming in code design](https://www.youtube.com/watch?v=-ROXIG4raiA), **Michał Dominiak**, CppCon, 2015\n- [Functional Programming in C++](https://www.youtube.com/watch?v=SCC23W3CQc8), **Nicola Gigante**, Meeting C++ 2015\n- [Functional programming: functors and monads](https://www.youtube.com/watch?v=2FbeGrbXe2M), **Michał Dominiak**, CppCon, 2015\n- [Goodbye metaprogramming, and hello functional](https://www.youtube.com/watch?v=fH2WBvI8dbk), **Paul Fultz**, 2016\n- [Functional C++](https://www.youtube.com/watch?v=CIg6eyJv4dk\u0026t=169s), **Kevlin Henney**, BUILD STUFF, 2017\n- [Functional Programming Tools in C++](https://vimeo.com/246623471), **Sumant Tambe**, SF Bay Area ACCU, 2017\n- [**constexpr** ALL the Things! (Combinatorial parsers)](https://www.youtube.com/watch?v=PJwd4JLYJJY), **Ben Deane**, **Jason Turner**, CppCon, 2017\n- [What Could Possibly Go Wrong?: A Tale of Expectations and Exceptions](https://www.youtube.com/watch?v=GC4cp4U2f2E), **Simon Brand**, **Phil Nash**, CppCon, 2018\n- [Generalized Full Duplex Messaging](https://www.youtube.com/watch?v=UalTAQmP3iE), **Jason Rice**, C++ Now, 2018\n\n#### Screencasts\n\n- [Learning Modern C++ Functional Programming: Understand Essential Part](https://www.youtube.com/watch?v=W1IMyrqeqM4), Packt Video, 2018\n- [Functional Programming in C++ Using Lambda Expressions](https://www.youtube.com/watch?v=58BrFvjNhWY), CodesBay, 2018\n\n## Cources\n\n- [Functional Programming using C++ (1/27) - Introducing functional programming](https://www.youtube.com/watch?v=jD8Tu1tqvZo), **Tobias Hermann**, 2017\n- [Functional Programming using C++ (2/27) - Correctness follows from expressiveness](https://www.youtube.com/watch?v=27tFyKc6g3U), **Tobias Hermann**, 2017\n\n## QA\n\n#### StackOverflow Questions\n\n- [Functional Programming in C++](https://stackoverflow.com/questions/1981400/functional-programming-in-c)\n- [What can C++ offer as far as functional programming?](https://stackoverflow.com/questions/21471836/what-can-c-offer-as-far-as-functional-programming)\n- [Monad interface in C++](https://stackoverflow.com/questions/39725190/monad-interface-in-c)\n- [C++ Design: Functional Programming vs OOP](https://softwareengineering.stackexchange.com/questions/180522/c-design-functional-programming-vs-oop)\n- [Persistent data structures in c++](https://stackoverflow.com/questions/4394399/persistent-data-structures-in-c)\n\n#### Quora Questions\n\n- [Is C++ is a functional programming language or not?](https://www.quora.com/Is-C++-is-a-functional-programming-language-or-not)\n- [Can C++ be used for functional programming?](https://www.quora.com/Can-C++-be-used-for-functional-programming)\n\n---\n\n# Russian Materials\n\n## Articles (Rus)\n\n#### Basics (Rus)\n\n- [Функциональное программирование и c++ на практике](https://habr.com/post/324518/), **Никита Черный aka nikitablack**, 2017\n  * [Functional programming in c++ by example (Eng)](https://nikitablack.github.io/2017/03/23/Functional-programming-in-c-by-example.html), **Никита Черный aka nikitablack**, 2017\n- [Каррирование и частичное применение на C++14 (Currying and partial application in C++14)](https://habr.com/post/340722/), **Матвей Черевко**, 2017\n\n#### Monads (Rus)\n\n- [Монады и do-нотация в C++ (Monads and do-notation in C++)](https://habr.com/post/205026/), **stepic777**, 2013\n- [Использование монад в С++. Часть 1: монада списка (Using monads in C++. Part 1: The List monad)](https://habr.com/company/infopulse/blog/260809/), **Владимир aka tangro**, 2015\n- [Монада Maybe на языке C++ (The Maybe monad in C++)](https://nesteruk.wordpress.com/2015/12/24/maybe-monad-cpp/), **Дмитpий Hecтepук**, 2015\n\n#### Design Concepts and Approaches (Rus)\n\n## Talks and Screencasts (Rus)\n\n#### Talks (Rus)\n\n- [Эволюция метапрограммирования: как правильно работать со списками типов](https://www.youtube.com/watch?v=IF51Gsu3Cec\u0026list=PLZN9ZGiWZoZof_AvWub4hAk6Yg4U5rTpT\u0026index=8), **Олег Фатхиев**, C++ Siberia 2019\n- [Элементы функционального программирования в современном С++](https://www.youtube.com/watch?v=AVpCdZ_RrpA), **Павел Кретов**, DataArt Online\n\n- **Alexander Granin** talks\n  * [Функциональный и декларативный дизайн на С++ (Functional and Declarative Design in C++)](https://youtu.be/tc8w8MbJQNs?t=9370), C++ User Group Novosibirsk, 2014\n  * [Функциональный микроскоп: линзы в С++ (Functional Microscope: Lenses in C++)](https://www.youtube.com/watch?v=7vyNRD1TRYs), C++ Siberia, 2015\n  * [Функциональная \"Игра Жизнь\": параллельные клеточные автоматы и комонады в С++ (Functional 'Game of Life': Parallel Cellular Automata and Comonads in C++)](https://www.youtube.com/watch?v=iKrnGSkWPnw), C++ Russia, 2016\n  * [Функциональный подход к Software Transactional Memory в С++ (Pure Functional Approach to Software Transactional Memory in C++)](https://www.youtube.com/watch?v=VHZPcz8HwZs), C++ Russia, 2018\n  * [Настоящее и будущее функционального программирования на C++ (The Present and The Future of Functional Programming in C++)](https://www.youtube.com/watch?v=BEmwnPGfcTU\u0026list=PLZN9ZGiWZoZof_AvWub4hAk6Yg4U5rTpT), Keynote, C++ Siberia 2019\n  * [Монадические парсеры (Monadic Parsers)](https://www.youtube.com/watch?v=q39PHTJDaLE), C++ Russia 2019 Moscow\n\n---\n\n# Projects\n\n### Libraries\n| Library                                                     | Description                                                                      | Author                    |\n|-------------------------------------------------------------|----------------------------------------------------------------------------------|---------------------------|\n| [Boost.Hana](https://boostorg.github.io/hana)               | Boost.Hana is a library with concepts borrowed from category theory              | ?                         |\n| [optional](https://github.com/TartanLlama/optional)         | C++11/14/17 std::optional with functional-style extensions and reference support | Simon Brand               |\n| [expected](https://github.com/TartanLlama/expected)         | C++11/14/17 std::expected with functional-style extensions                       | Simon Brand               |\n| [FTL](https://github.com/beark/ftl)                         | C++ template library for fans of functional programming                          | beark                     |\n| [LIBF++](https://github.com/GJDuck/libf)                    | C++ as a Pure Functional Programming Language                                    | GJDuck                    |\n| [Immer](https://github.com/arximboldi/immer)                | Postmodern immutable and persistent data structures for C++                      | Juan Pedro Bolívar Puente |\n| [Lager](https://github.com/arximboldi/lager)                | Library for functional interactive C++ programs // Redux for C++                 | Juan Pedro Bolívar Puente |\n| [cpp_stm_free](https://github.com/graninas/cpp_stm_free)    | Composable monadic STM for C++ on Free monads                                    | Alexander Granin          |\n| [Cat](https://github.com/awgn/cat)                          | Cat: C++14/17 functional library                                                 | Nicola Bonelli            |\n| [neither](https://github.com/loopperfect/neither)           | A functional implementation of Either in C++14.                                  | LoopPerfect               |\n| [FunctionalPlus](https://github.com/Dobiasd/FunctionalPlus) | Functional Programming Library for C++. Write concise and readable C++ code.     | Tobias Hermann            |\n| [Immutable++](https://github.com/rsms/immutable-cpp)        | Persistent immutable data structures providing practically O(1) for appends, updates and lookups based on work by Rich Hickey and by consequence Phil Bagwell. | Rasmus Andersson |\n| [Okasaki](https://github.com/BartoszMilewski/Okasaki)       | Functional data structures in C++                                                | Bartosz Milewski          |\n| [Asyncro](https://github.com/dkormalev/asynqro)             | Monadic Futures                          | Dennis Kormalev           |\n| [Cefal](https://github.com/dkormalev/cefal)                 | (Concepts-enabled) Functional Abstraction Layer for C++                          | Dennis Kormalev           |\n\n \n### Showcase Projects\n\n\n| Project                                                                   | Description                                                                                                                                          | Author                    |\n|---------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|\n| [Ewig](https://github.com/arximboldi/ewig)                                | A mini-emacs built using C++ in a functional way, using the Redux architecture. Supports efficiently editing huge file and concurrent loading/saving | Juan Pedro Bolívar Puente |\n| [Amber](https://github.com/graninas/Amber)                                | The 'Amber' game project demonstranting functional and declarative design in C++.                                                                    | Alexander Granin          |\n| [cpp_lenses](https://github.com/graninas/cpp_lenses)                      | Functional lenses demo in C++                                                                                                                        | Alexander Granin          |\n| [CMLife](https://github.com/graninas/CMLife)                              | Functional Game of Life in C++. Based on functional declarative design and functional idioms (comonads, zippers etc.)                                | Alexander Granin          |\n| [coroutine_monad](https://github.com/toby-allsopp/coroutine_monad)        | Using coroutines for monadic composition                                                                                                             | Toby Allsopp              |\n| [Monadic parsing in C++](https://gist.github.com/splinterofchaos/4112114) | Monadic parsers                                                                                                                                      | Scott Prager              |\n| [monad_do](https://github.com/evgeny-panasyuk/monad_do)                   | Emulation of DO syntax sugar for monads in C++                                                                                                       | Evgeny Panasyuk           |\n| [kari.hpp](https://github.com/BlackMATov/kari.hpp)                        | Experimental library for currying in C++14                                                                                                           | Matvey Cherevko           |\n| [Lambda.cpp](http://matt.might.net/articles/lambda-style-anonymous-functions-from-c++-templates/Lambda.cpp) | Lambdas PoC implementation                                                                                         | Matthew Might             |\n| [Knuth's arrow notation](https://gist.github.com/graninas/358f9c7b80944b7e6a3fe56c6fe09a57) | Implemented in two variants: constexpr functions and templates                                                                     | Alexander Granin          |\n| [Constexpr monadic parsers (\"Constexpr all the things\")](https://github.com/lefticus/constexpr_all_the_things) | See also the talk \"Constexpr all the things\".                                                                   | Ben Deane, Jason Turner   |\n| [cpp_parsec_free](https://github.com/graninas/cpp_parsec_free)            | Monadic parsers (based on Free monads)                                                                                                               | Alexander Granin          |\n\n---\n\n# Misc\n\n### C++ FP Experts\n\nThe list of authors of the materials presented here, listed alphabetically. (Some authors can be missing by occasion).\n\n_Please, pm me if you don't want to be in this list. Or if you want to be there._\n\n- **Abel Sinkovics**\n- **Alexander Granin**\n- **Anders Schau Knatten**\n- **Barry Revzin**\n- **Bartosz Milewski**\n- **Ben Deane**\n- **Brian McNamara**\n- **Bryce Adelstein-Lelbach**\n- **Chris Weed**\n- **David Sankel**\n- **Dennis Kormalev**\n- **Eric Niebler**\n- **Evgeny Panasyuk**\n- **Isabella Muerte**\n- **Ivan Čukić**\n- **Jason Rice**\n- **Jason Turner**\n- **John Carmack**\n- **John Wiegley**\n- **Jonathan Boccara**\n- **Juan Pedro Bolívar Puente**\n- **Kevlin Henney**\n- **Kiryll Shynharow**\n- **Matthew Might**\n- **Michał Dominiak**\n- **Nala Ginrut**\n- **Nicola Gigante**\n- **Nicola Bonelli**\n- **Paul Fultz**\n- **Phil Nash**\n- **Rainer Grimm**\n- **Rasmus Andersson**\n- **Scott Prager**\n- **Simon Brand**\n- **Stuart Golodetz**\n- **Sumant Tambe**\n- **Tobias Hermann**\n- **Toby Allsopp**\n- **Vicente J. Botet Escribá**\n- **Vittorio Romeo**\n- **Wisnu Anggoro**\n- **Никита Черный aka nikitablack**\n- **stepic777**\n- **Олег Фатхиев**\n- **Павел Кретов**\n- **Владимир aka tangro**\n- **Дмитpий Hecтepук**\n- **Матвей Черевко aka BlackMATov**\n","funding_links":[],"categories":["Other Awesome Projects","C++"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraninas%2Fcpp_functional_programming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraninas%2Fcpp_functional_programming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraninas%2Fcpp_functional_programming/lists"}