Mostly adequate guide to FP (in javascript)
Switch branches/tags
Nothing to show
Clone or download
Latest commit 066de53 Oct 17, 2018
Permalink
Failed to load latest commit information.
exercises Merge pull request #414 from ayeseeem/ayeseeem-more-simple-typos Mar 12, 2018
images Merge remote-tracking branch 'mostly-adequate/master' into es6/es7 Jan 3, 2018
styles Bug: With sepia the links are not highlighted Jan 17, 2018
.editorconfig add .editorconfig 👍 Feb 9, 2018
.generate-summary.pl use perl from package.json script to call generate-summary rather tha… Feb 10, 2018
.gitignore Ignore generated book files Jun 27, 2018
CONTRIBUTING.md Fix link to LICENSE - it's not .md Mar 2, 2018
FAQ.md Fixing a few minor typos.. Jul 23, 2016
LICENSE review package.json(s) and README Dec 31, 2017
README.md Chapters 8-12 exist now Sep 17, 2018
SUMMARY.md re-generate summary to include recent changes Feb 25, 2018
TRANSLATIONS.md add link to Indonesian translation Feb 25, 2018
appendix_a.md Fix typo (peak -> peek) in appendices A, B, and C Jun 5, 2018
appendix_b.md Fix typo (peak -> peek) in appendices A, B, and C Jun 5, 2018
appendix_c.md Appendix c: Fixed type signature for `flip` function Sep 30, 2018
book.json Use ”cover” property in book.json for the cover image Jun 27, 2018
ch01.md Changed the text flock_a to flockA to match the code Apr 12, 2018
ch02.md Unify the headings capitalisation Feb 12, 2018
ch03.md Ch 03 `const` -> `let` May 10, 2018
ch04.md fix: change the git url in ch04 May 17, 2018
ch05.md Introduce variadic _compose_ in ch05 and fallback to simple _compose2… May 24, 2018
ch06.md Merge pull request #409 from ayeseeem/ayeseeem-clarify-demo-app-selector Mar 28, 2018
ch07.md Uppercase Milner in ch08.md title Feb 21, 2018
ch08.md Update ch08.md Jul 26, 2018
ch09.md docs(ch09): fix ReferenceError Mar 18, 2018
ch10.md Remove spurious apostrophe Mar 7, 2018
ch11.md Fix wrong function name in text Mar 7, 2018
ch12.md Typo in Chapter 12 Oct 17, 2018
package-lock.json review package.json(s) and README Dec 31, 2017
package.json Add npm scripts to generate pdf and epub Jun 27, 2018

README.md

cover

About this book

This is a book on the functional paradigm in general. We'll use the world's most popular functional programming language: JavaScript. Some may feel this is a poor choice as it's against the grain of the current culture which, at the moment, feels predominately imperative. However, I believe it is the best way to learn FP for several reasons:

  • You likely use it every day at work.

    This makes it possible to practice and apply your acquired knowledge each day on real world programs rather than pet projects on nights and weekends in an esoteric FP language.

  • We don't have to learn everything up front to start writing programs.

    In a pure functional language, you cannot log a variable or read a DOM node without using monads. Here we can cheat a little as we learn to purify our codebase. It's also easier to get started in this language since it's mixed paradigm and you can fall back on your current practices while there are gaps in your knowledge.

  • The language is fully capable of writing top notch functional code.

    We have all the features we need to mimic a language like Scala or Haskell with the help of a tiny library or two. Object-oriented programming currently dominates the industry, but it's clearly awkward in JavaScript. It's akin to camping off of a highway or tap dancing in galoshes. We have to bind all over the place lest this change out from under us, we don't have classes (yet), we have various work arounds for the quirky behavior when the new keyword is forgotten, private members are only available via closures. To a lot of us, FP feels more natural anyways.

That said, typed functional languages will, without a doubt, be the best place to code in the style presented by this book. JavaScript will be our means of learning a paradigm, where you apply it is up to you. Luckily, the interfaces are mathematical and, as such, ubiquitous. You'll find yourself at home with Swiftz, Scalaz, Haskell, PureScript, and other mathematically inclined environments.

Read it Online

For a best reading experience, read it online via Gitbook.

  • Quick-access side-bar
  • In-browser exercises
  • In-depth examples

Download it

Do it yourself

git clone https://github.com/MostlyAdequate/mostly-adequate-guide.git
cd mostly-adequate-guide/
npm install
npm run setup
npm run generate-pdf
npm run generate-epub

Note! To generate the ebook version you will need to install ebook-convert. Installation instructions.

Table of Contents

See SUMMARY.md

Contributing

See CONTRIBUTING.md

Translations

See TRANSLATIONS.md

FAQ

See FAQ.md

Plans for the future

  • Part 1 (chapters 1-7) is a guide to the basics. I'm updating as I find errors since this is the initial draft. Feel free to help!
  • Part 2 (chapters 8-13) address type classes like functors and monads all the way through to traversable. I hope to squeeze in transformers and a pure application.
  • Part 3 (chapters 14+) will start to dance the fine line between practical programming and academic absurdity. We'll look at comonads, f-algebras, free monads, yoneda, and other categorical constructs.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.