A curated list of awesome functional programming in JavaScript. Origin here, suggestions and PRs are welcome.
Table of Contents
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#librariesLibraries
- Ramda – A practical functional library for JavaScript that is designed specifically for a functional programming style. A style that makes it easy to create functional pipelines and never mutates user data.
- Folktale – Folktale is a suite of libraries for generic functional programming that allows you to write elegant modular applications with fewer bugs and more reuse.
- lodash/fp – An instance of Lodash with its methods wrapped to produce immutable, auto-curried, iteratee-first, data-last methods.
- functional.js – A lightweight functional JavaScript library that facilitates currying and point-free / tacit programming.
- 101 – A modern and modular JavaScript utility library made to work well with vanilla JavaScript methods.
- fnuc – A functional library for CoffeeScript (and JavaScript) to facilitate functional composition and higher order functions.
- barely-functional – A tiny (2.7kb) functional programming library using native ES5/6 operations.
- prelude.ls – A functionally oriented utility library somewhat based off of Haskell’s Prelude module.
- allong.es – A collection of functions to facilitate writing JavaScript with functions as first-class values, designed to complement libraries like Underscore, not compete with them.
- 1-liners – Functional tools that couldn’t be simpler. A dead simple functional utility belt, hand-crafted with love and attention.
- fn-curry – A simple function to curry a function.
- curry – Curry your functions using function bind syntax.
- compose-function – Compose a new function from smaller functions.
- functionize – A collection of functions which aid in making non-functional libraries functional.
- lambdajs – The full ECMAScript API done a functional way.
- fp-dom – Making the DOM functional.
- trifl – A functional user interface library with unidirectional dataflow and a virtual dom.
- funcy – An experiment in adding functional pattern matching to JavaScript. Experimental
- date-fp – A functional utility library for working with JavaScript dates. All functions in date-fp are pure, autocurried and will not mutate the date objects they are applied to.
- part – A micro library that encourages functional programming by making native methods available as partially applied functions.
- claire – A property-based testing library for clearly specifying code invariants and behaviour.
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#data-structuresData Structures
Write performant functional code by using the right data structures for the task.
- Immutable.js – Immutable persistent data collections.
- Mori – ClojureScript’s persistent data structures and supporting API from the comfort of vanilla JavaScript.
- immutable-sequence.js – High performance implementation of Immutable Sequence in JavaScript, based on Finger Trees.
- Timm – Immutability helpers with fast reads and acceptable writes.
- Lazy.js – A utility library with a lazy engine under the hood that strives to do as little work as possible while being as flexible as possible.
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#algebraic-data-typesAlgebraic Data Types
Use the laws of math instead of always reinventing your own thing. Algebraic!
- FantasyLand – Not a library, but a specification of the Monad laws for libraries to follow.
- daggy – Library for creating tagged constructors.
- Sanctuary – Sanctuary makes it possible to write safe code without null checks.
- ramda-fantasy – Fantasy-Land compatible types for easy integration with Ramda.js.
- monet.js – A library that assists functional programming by providing a rich set of Monads and other useful functions.
- union-type – A small JavaScript library for defining and using union types.
- freeky – A collection of Free monads.
- Fluture – A Future library with included control utilities, high performance and great error messages.
- fantasy-combinators – Common combinators.
- fantasy-birds – Port of the Haskell package Data.Aviary.Birds. Everything for your combinatory needs.
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#lensesLenses
- lenses – Composable kmett style lenses.
- optics – Profunctor optics (Lens, Prism, iso).
- ramda-lens – Lens library built on Ramda.
- fantasy-lenses – Composable, immutable getters and setters. (Profunctor lenses WIP)
- nanoscope – Lenses with dotty support.
- partial.lenses – Ramda compatible partial lenses. View, insert and update optional data.
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#functional-languages-that-compile-to-javascriptFunctional Languages that Compile to JavaScript
- ClojureScript – Compiles Clojure, a hosted Lisp with immutable persistent data structures, to JavaScript.
- Elm – A type-safe functional programming language for declaratively creating web browser-based graphical user interfaces. Implemented in Haskell.
- PureScript – A small strongly typed programming language that compiles to JavaScript.
- Idris – A general purpose pure functional programming language with dependent types.
- GHCJS – Haskell to JavaScript compiler, based on GHC.
- ElixirScript – Compiles a subset of Elixir, a dynamic, functional language designed for building scalable and maintainable applications, to JavaScript.
- Js_of_ocaml – Compiles OCaml bytecode to JavaScript, making it possible to run OCaml programs in the browser.
- Scala.js – Compiles Scala to JavaScript.
- LiveScript – LiveScript has a straightforward mapping to JavaScript and allows you to write expressive code devoid of repetitive boilerplate.
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#resourcesResources
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#booksBooks
- Professor Frisby’s Mostly Adequate Guide to Functional Programming – This is a book on the functional paradigm in general using the world’s most popular functional programming language: JavaScript. By Brian Lonsdorf (2016)
- JavaScript Allongé, the “Six” edition by Reginald Braithwaite (2016)
- Functional Programming in JavaScript by Luis Atencio (2016)
- Eloquent JavaScript by Marijn Haverbeke (2014)
- Functional JavaScript by Michael Fogus (2013)
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#articlesArticles
- The Two Pillars of JavaScript Pt 2: Functional Programming
- FP Concepts in JavaScript – An Intro to Functional Programming Concepts in JavaScript
- Functional programming with JavaScript
- Why Curry Helps
- Favoring Curry
- JavaScript and Type Thinking
- Lazy, composable, and modular JavaScript
- Why Ramda – Introduction to the principles of ramda.
- A Monad in Practicality: First-Class Failures – Introduction to Either.
- A Monad in Practicality: Controlling Time – Introduction to Futures.
- A gentle introduction to functional JavaScript – A four-part series introduction functional programming in JavaScript.
- Functional programming – Many articles on various aspects of functional programming in JavaScript by Gleb Bahmutov.
- Functional Programming Jargon – Jargon from the functional programming world explained in JavaScript.
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#videosVideos
- Classroom Coding with Prof. Frisby – A series that builds a “practical” web application with React and functional programming in JavaScript.
- Hey Underscore, You’re Doing It Wrong! – Underscore.js claims to be a functional programming library, but is it really?
- Functional programming patterns for the non-mathematician
- Pure JavaScript
- Pure, functional JavaScript
https://blog.duyet.net/2016/04/awesome-functional-programming-in-javascript.html#examples-and-exercisesExamples and Exercises
- FPJS-Class – Functional Programming learned through JS
- functional-javascript-workshop – Teaching fundamental functional programming features of JavaScript
- functional-frontend-architecture – A functional frontend framework. Based on Ramda + union-type-js + Flyd + Snabbdom
- cube-composer – A puzzle game inspired by functional programming.
- FP Youtube Search – YouTube search app with ReactJS, Redux, and FP concepts
- Hardcore Functional Programming in JavaScript – Learn to apply techniques from the forefront of computer science research to solve practical problems in Javascript. Discover functional programming and see it demonstrated step-by-step with how to build an example web app using abstract interfaces like Monads, Functors, Monoids and Applicatives. (commercial)