331 lines
16 KiB
HTML
331 lines
16 KiB
HTML
<h2 id="awesome-functional-programming-awesome">Awesome Functional
|
||
Programming <a href="https://github.com/sindresorhus/awesome"><img
|
||
src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg"
|
||
alt="Awesome" /></a></h2>
|
||
<p>Based on the <a
|
||
href="https://github.com/sindresorhus/awesome/">Awesome</a> project</p>
|
||
<h2 id="what-is-this-about">What is this about?</h2>
|
||
<p>On the last decade, functional programming has gained a new found
|
||
power due to its declarative characteristics which, some would say, are
|
||
very effective for parallel computing and for the whole usage of <a
|
||
href="https://en.wikipedia.org/wiki/Moore%27s_law">Moores Law</a>.</p>
|
||
<p>This repo gathers some material on Functional Programming such as
|
||
blog posts, papers, videos, tools, etc. and also aims to clarify some of
|
||
the theoretical subjects behind it.</p>
|
||
<p>Want to contribute? Please refer to <a
|
||
href="https://github.com/lucasviola/awesome-functional-programming/blob/master/contributing.md">this</a>
|
||
first.</p>
|
||
<h2 id="table-of-contents">Table of Contents</h2>
|
||
<ul>
|
||
<li><a href="#blog-posts">Blog Posts</a></li>
|
||
<li><a href="#papers">Papers</a></li>
|
||
<li><a href="#wikis">Wikis</a></li>
|
||
<li><a href="#books">Books</a></li>
|
||
<li><a href="#communities">Communities</a></li>
|
||
<li><a
|
||
href="#discussions-quora-stack-overflow-reddit-etc">Discussions</a></li>
|
||
<li><a href="#videos">Videos</a></li>
|
||
<li><a href="#lectures">Lectures</a></li>
|
||
<li><a href="#tools">Tools</a></li>
|
||
<li><a href="#repos">Repos</a></li>
|
||
<li><a href="#people">People</a></li>
|
||
</ul>
|
||
<h3 id="blog-posts">Blog posts</h3>
|
||
<ul>
|
||
<li><a
|
||
href="http://www.akitaonrails.com/2015/10/28/personal-thoughts-on-the-current-functional-programming-bandwagon">Personal
|
||
thoughts on the current functional programming bandwagon</a> Despite the
|
||
name, this post actually clarifies some baisc concepts on Functional
|
||
Programming, explains some of the History of FP and the implementation
|
||
of FPs features on imperative languages and talks about all the fuss on
|
||
declarative programming and why it has become so popular in the last few
|
||
years.</li>
|
||
<li><a
|
||
href="http://robotlolita.me/2014/03/20/a-monad-in-practicality-controlling-time.html">A
|
||
Monad in Practicality - Controlling Time</a></li>
|
||
<li><a
|
||
href="http://robotlolita.me/2013/12/08/a-monad-in-practicality-first-class-failures.html">A
|
||
Monad in Practicality - First Class Failures</a></li>
|
||
<li><a
|
||
href="http://www.haskellforall.com/2014/10/how-to-desugar-haskell-code.html">How
|
||
to desugar Haskell Code</a></li>
|
||
<li><a
|
||
href="http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html">Functors,
|
||
Applicatives, And Monads In Pictures</a></li>
|
||
<li><a href="http://www.stephendiehl.com/posts/monads.html">Monads Made
|
||
Difficult</a></li>
|
||
<li><a
|
||
href="https://medium.com/@lettier/your-easy-guide-to-monads-applicatives-functors-862048d61610">Your
|
||
easy guide to Monads, Applicatives, & Functors</a></li>
|
||
<li><a href="https://freecontent.manning.com/async-streams-in-c/">Async
|
||
Streams in C#</a></li>
|
||
<li><a
|
||
href="https://doordash.engineering/2022/03/22/how-to-leverage-functional-programming-in-kotlin-to-write-better-cleaner-code/">How
|
||
to leverage functional programming in Kotlin to write better, cleaner
|
||
code</a></li>
|
||
</ul>
|
||
<h3 id="papers">Papers</h3>
|
||
<ul>
|
||
<li><a href="http://lambda-the-ultimate.org/node/1180">Tradeoffs between
|
||
Unique Types and Monads</a></li>
|
||
<li><a
|
||
href="http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/start.htm">The
|
||
implementation of Functional Programming Languages</a> - A paper by
|
||
Simon Peyton Jones</li>
|
||
<li><a
|
||
href="http://research.microsoft.com/en-us/um/people/simonpj/papers/fd-chr/esop04.pdf">Sound
|
||
and Decidable Type Inference for Functional Dependencies</a> - Another
|
||
very famous paper on Type Inference by the main creator of Haskell and
|
||
GHC</li>
|
||
<li><a
|
||
href="http://research.microsoft.com/en-us/um/people/simonpj/papers/meta-haskell/meta-haskell.pdf">Template
|
||
Meta-Programming for Haskell</a> - Paper about generating code at
|
||
compile-time in Haskell</li>
|
||
<li><a
|
||
href="http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf">Why
|
||
Functional Programming Matters</a></li>
|
||
<li><a
|
||
href="http://isabelle.in.tum.de/~haftmann/pdf/from_hol_to_haskell_haftmann.pdf">From
|
||
Higher-Order Logic to Haskell: There and Back Again</a></li>
|
||
<li><a
|
||
href="http://es.cs.uni-kl.de/events/TPHOLs-2007/proceedings/B-178.pdf">Translating
|
||
Haskell to Isabelle</a></li>
|
||
</ul>
|
||
<h3 id="wikis">Wikis</h3>
|
||
<ul>
|
||
<li><a href="http://ncatlab.org/nlab/show/HomePage">nLab</a> - A
|
||
wiki-lab with articles, discussion and tools from the point of view of
|
||
category theory, which is the main math behind FP.</li>
|
||
<li><a
|
||
href="https://en.wikibooks.org/wiki/Haskell/Category_theory">Haskell/Category
|
||
Theory</a> - A good overview on Category Theory applied to Haskell from
|
||
Wikibooks.</li>
|
||
<li><a href="https://wiki.haskell.org/Haskell">Haskell Wiki</a></li>
|
||
</ul>
|
||
<h3 id="books">Books</h3>
|
||
<ul>
|
||
<li><a href="http://learnyouahaskell.com/">Learn you a Haskell</a> -
|
||
Book, but you can read it online for free as well. Very beginner
|
||
friendly.</li>
|
||
<li><a
|
||
href="https://books.google.com.br/books?id=I9E_CgAAQBAJ&pg=PR13#v=onepage&q&f=false">The
|
||
Little Prover</a> - Talks about a theorem prover called JBob for writing
|
||
proofs in LISP.</li>
|
||
<li><a href="http://isabelle.in.tum.de/doc/tutorial.pdf">Isabelle/HOL -
|
||
A Proof Assistant for Higher-Order Logic</a> - A Book on implementing
|
||
logical formalisms in Isabelle/HOL.</li>
|
||
<li><a href="http://www.ccs.neu.edu/home/matthias/BTML/">The Little
|
||
MLer</a> - A book focused on teaching types, recursive thinking and
|
||
other important subjects in Standard ML.</li>
|
||
<li><a
|
||
href="http://catalogue.pearsoned.co.uk/educator/product/Introduction-to-Programming-using-SML/9780201398205.page">Introduction
|
||
to Programming using SML</a> - Introduces you to programming design in a
|
||
very mathematical way.</li>
|
||
<li><a href="http://www.htdp.org/">How to Design Programs</a> / <a
|
||
href="http://www.ccs.neu.edu/home/matthias/HtDP2e/">Second
|
||
Edition</a></li>
|
||
<li><a
|
||
href="http://www.amazon.com/Introduction-Functional-Programming-International-Computing/dp/0134841891">Introduction
|
||
to Functional Programming</a></li>
|
||
<li><a href="https://www.manning.com/books/haskell-in-depth">Haskell in
|
||
Depth</a> - the perfect second book on Haskell which dives into examples
|
||
and application scenarios designed to teach how Haskell works and how to
|
||
apply it correctly.</li>
|
||
<li><a href="https://www.manning.com/books/grokking-simplicity">Grokking
|
||
Simplicity: Taming complex software with functional thinking</a> -
|
||
Teaches functional programming from first principles using real-world
|
||
scenarios.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/functional-programming-in-scala-second-edition">Functional
|
||
Programming in Scala, Second Edition</a> - International bestseller
|
||
revised with new exercises, annotations, and full coverage of Scala
|
||
3.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/functional-programming-in-c-sharp-second-edition">Functional
|
||
Programming in C#, Second Edition</a> - Real world examples and
|
||
practical techniques for functional programming in C#.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/grokking-functional-programming">Grokking
|
||
Functional Programming</a> - Introduction to functional
|
||
programming.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/functional-programming-in-kotlin">Functional
|
||
Programming in Kotlin</a> - Master techniques and concepts of functional
|
||
programming to deliver safer, simpler, and more effective Kotlin
|
||
code.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/functional-design-and-architecture">Functional
|
||
Design and Architecture</a> - Design patterns and architectures for
|
||
building production quality applications using functional programming,
|
||
with examples in Haskell and other FP languages.</li>
|
||
<li><a href="https://www.manning.com/books/haskell-bookcamp">Haskell
|
||
Bookcamp</a> - In this book, you’ll get practical experience writing
|
||
Haskell code and applying functional programming to actual development
|
||
challenges.</li>
|
||
<li><a
|
||
href="https://www.perlego.com/book/800653/mastering-functional-programming-functional-techniques-for-sequential-and-parallel-programming-with-scala-pdf">Mastering
|
||
Functional Programming</a> - If you are from an imperative and OOP
|
||
background, this book will guide you through the world of functional
|
||
programming, irrespective of which programming language you use.</li>
|
||
<li><a href="https://www.manning.com/books/jax-in-action">Jax in
|
||
Action</a> - A book about The JAX numerical computing library.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/learn-powershell-scripting-in-a-month-of-lunches-second-edition">Learn
|
||
PowerShell Scritping in a Month of Lunches</a> - Automate complex tasks
|
||
and processes with PowerShell scripts.</li>
|
||
<li><a href="https://www.manning.com/books/f-sharp-in-action">F# in
|
||
Action</a> - Book about practical F# development skills needed to create
|
||
professional applications.</li>
|
||
<li><a
|
||
href="https://www.manning.com/books/elixir-in-action-third-edition">Elixir
|
||
in Action, Third Edition</a> - Fully updated to Elixir 1.14, this
|
||
authoritative bestseller reveals how Elixir tackles problems of
|
||
scalability, fault tolerance, and high availability.</li>
|
||
</ul>
|
||
<h3 id="communities">Communities</h3>
|
||
<ul>
|
||
<li><a href="http://lambda-the-ultimate.org/">Lambda the Ultimate</a> -
|
||
Community focused on discussing researches, papers and hot topic on
|
||
academia. Very high tech discussion level.</li>
|
||
<li><a href="https://www.fpcomplete.com/">FP Complete</a> - Community
|
||
focused on helping companies and students on learning and implementing
|
||
Functional Programming in Haskell. Hosters of one of the most famous
|
||
Haskell learning centers: <a
|
||
href="https://www.schoolofhaskell.com/school">School of Haskell</a></li>
|
||
<li><a href="http://www.haskellers.com/">Haskellers</a> - The meeting
|
||
point for Haskell Programmers</li>
|
||
<li><a href="http://elixir-lang.moscow/">ElixirLangMoscow</a> - Russian
|
||
Elixir community</li>
|
||
</ul>
|
||
<h3 id="discussions-quora-stack-overflow-reddit-etc">Discussions (Quora,
|
||
Stack Overflow, Reddit, etc)</h3>
|
||
<ul>
|
||
<li><a
|
||
href="https://www.quora.com/Why-dont-more-programmers-use-Haskell">Why
|
||
dont more programmers use Haskell</a></li>
|
||
<li><a
|
||
href="http://lambda-the-ultimate.org/classic/message1532.html">Hidden
|
||
complexities of tail-call/tail-recursion optimization</a></li>
|
||
</ul>
|
||
<h3 id="videos">Videos</h3>
|
||
<ul>
|
||
<li><a href="https://www.youtube.com/watch?v=ZhuHCtR3xq8">Dont fear the
|
||
Monad</a> - Explanation on one of the most obscure topics of Functional
|
||
Programming by Microsoft researcher Brian Beckman.</li>
|
||
<li><a href="https://www.youtube.com/watch?v=iSmkqocn0oQ">Haskell is
|
||
useless</a> - Simon Peyton Jones being just too humble about his
|
||
creation.</li>
|
||
<li><a href="https://www.youtube.com/watch?v=XxzzJiXHOJs">Brian Beckman:
|
||
The Zen of Stateless State</a></li>
|
||
<li><a href="https://www.youtube.com/watch?v=z0N1aZ6SnBk">Erik Meijer:
|
||
Functional Programming</a></li>
|
||
<li><a href="https://www.youtube.com/watch?v=Mw_Jnn_Y5iA">Scala Monads:
|
||
Declutter Your Code With Monadic Design</a></li>
|
||
<li><a href="https://www.youtube.com/watch?v=9SBR_SnrEiI">Philip Wadler
|
||
and Erik Meijer: On Programming Language Theory and Practice</a></li>
|
||
<li><a
|
||
href="https://www.manning.com/livevideo/kotlin-for-android-and-java-developers">Kotlin
|
||
for Android & Java Developers</a> - LiveVideo course about Kotlin:
|
||
functional programming, object orientation and building an Android app
|
||
in Kotlin.</li>
|
||
<li><a href="https://www.youtube.com/watch?v=KW9U6HMKEgk">Do we really
|
||
need OOD and FDD?</a> - Functional Declarative Design (FDD) opposed to
|
||
Object-Oriented Design (OOD</li>
|
||
<li><a
|
||
href="https://www.youtube.com/playlist?list=PLuPevXgCPUIMbCxBEnc1dNwboH6e2ImQo">Functional
|
||
Programming with TypeScript</a> - Discover functional programming with
|
||
Typescript and create a library like fp-ts alongside Sahand Javid in
|
||
this beginner-friendly YouTube playlist.</li>
|
||
</ul>
|
||
<h3 id="lectures">Lectures</h3>
|
||
<ul>
|
||
<li><a
|
||
href="https://www.youtube.com/playlist?list=PLTA0Ta9Qyspa5Nayx0VCHj5AHQJqp1clD">C9
|
||
Lectures: Dr. Erik Meijer - Functional Programming Fundamentals</a> -
|
||
Series of Lectures from one of the creators of Haskell</li>
|
||
<li><a
|
||
href="https://www.youtube.com/watch?v=6COvD8oynmI&list=RD6COvD8oynmI#t=0">Adventure
|
||
with types in Haskell - Simon Peyton Jones</a> - Lectures about Haskells
|
||
strong Type System by Simon Peyton Jones.</li>
|
||
<li><a href="https://www.youtube.com/watch?v=YScIPA8RbVE">The Algebra of
|
||
Algebraic Data Types</a> - Very good explanation on the relationship
|
||
between math and Algebraic Data Types, which is the Type System of some
|
||
very common FP Languages such as Haskell and ML.</li>
|
||
</ul>
|
||
<h3 id="platforms">Platforms</h3>
|
||
<ul>
|
||
<li>[Paqmind.com] – Guides and challenges to learn and improve in
|
||
programming. All content is CS and FP oriented.</li>
|
||
</ul>
|
||
<h3 id="tools">Tools</h3>
|
||
<ul>
|
||
<li><a
|
||
href="https://www.cl.cam.ac.uk/research/hvg/Isabelle/">Isabelle/HOL</a>
|
||
- Generic proof assistant based on Higher Order Logic</li>
|
||
</ul>
|
||
<h3 id="repos">Repos</h3>
|
||
<ul>
|
||
<li><p><a href="https://github.com/idris-hackers/idris-koans">Idris
|
||
Koans</a> - Project for teaching Idris. A General Purpose Functional
|
||
Programming with Dependent Types</p></li>
|
||
<li><p><a
|
||
href="https://github.com/timoxley/functional-javascript-workshop">Functional
|
||
Javascript Workshop</a> - A functional Javascript workshop.</p></li>
|
||
<li><p><a href="https://github.com/the-little-prover/j-bob">J-Bob</a> -
|
||
The proof assistant from the book
|
||
<code>The Little Prover</code></p></li>
|
||
<li><p><a
|
||
href="https://github.com/olehkuchuk/haskell-must-watch">Haskell Must
|
||
Watch</a> - A list of videos, talks and courses on Haskell.</p></li>
|
||
<li><p><a href="http://www.it.dtu.dk/introSML/">Intro SML</a> - Code,
|
||
corrections and info on the book:
|
||
<code>Introduction to Programming using SML</code></p></li>
|
||
<li><p><a
|
||
href="https://github.com/busypeoples/functional-programming-javascript">Functional
|
||
Programming In JavaScript</a> - List of functional programming resources
|
||
in JavaScript.</p></li>
|
||
<li><p><a
|
||
href="https://github.com/hemanth/functional-programming-jargon">Functional
|
||
Programming Jargon</a> - Project for providing a glossary for FP, and
|
||
make learning FP easier.</p></li>
|
||
<li><p><a href="https://github.com/bow-swift/bow">Bow</a> - Companion
|
||
library for Typed Functional Programming in Swift.</p></li>
|
||
<li><p><a
|
||
href="https://github.com/lettier/parsing-with-haskell-parser-combinators">Parsing
|
||
With Haskell Parser Combinators</a> - A step-by-step guide to parsing
|
||
using Haskell parser combinators.</p></li>
|
||
<li><p><a
|
||
href="https://github.com/imteekay/functional-programming-learning-path.git">Functional
|
||
Programming Learning Path</a> - A Learning Path for Functional
|
||
Programming ### People</p></li>
|
||
<li><p><a
|
||
href="http://research.microsoft.com/en-us/people/simonpj/">Simon Peyton
|
||
Jones</a> - One of the creators of the Haskell Language and the Glasgow
|
||
Haskell Compiler. Microsoft Researcher.</p></li>
|
||
<li><p><a href="http://homepages.inf.ed.ac.uk/wadler/">Philip Wadler</a>
|
||
- Professor of Theoretical Computer Science at the University of
|
||
Edinburgh, author of the famous paper Propositions as Types. One of the
|
||
main people behind Java Generics Types.</p></li>
|
||
<li><p><a href="http://www.ccs.neu.edu/home/matthias/">Matthias
|
||
Felleisen</a> - Author of many books such as How to Design Programs, and
|
||
The Little Schemer.</p></li>
|
||
<li><p><a href="https://www.linkedin.com/pub/erik-meijer/0/5ba/924">Erik
|
||
Meijer</a> - Former software architect for Microsoft, Functional
|
||
Programming researcher, gives lectures on FP, Software Design and
|
||
Reactive programming.</p></li>
|
||
<li><p><a href="https://www.linkedin.com/in/brianbeckman">Brian
|
||
Beckman</a> - Former Microsoft Researcher, actual Software Engineer at
|
||
Amazon. Contributed to implementing FP features to inumerous Microsoft
|
||
technologies such as C#, LINQ and F#</p></li>
|
||
</ul>
|
||
<h3 id="license">License</h3>
|
||
<p><a href="https://creativecommons.org/publicdomain/zero/1.0/"><img
|
||
src="https://i.creativecommons.org/p/zero/1.0/88x31.png"
|
||
alt="CC0" /></a></p>
|
||
<p>To the extent possible under law, <a
|
||
href="http://lucasviola.github.io">Lucas Viola</a> has waived all
|
||
copyright and related or neighboring rights to this work.</p>
|
||
<p><a
|
||
href="https://github.com/lucasviola/awesome-functional-programming">functionalprogramming.md
|
||
Github</a></p>
|