Check the functional-perl website for properly formatted versions of these documents.
Various links
Note: most of these links are from 2015 and 2016. Please submit new ones if you've got good suggestions.
Function libraries
-
srfi-1, the list library for Scheme
-
Hoogle, finding functions in standard Haskell libraries
-
core-api, Clojure core function docs
Functional programming in X
-
JavaScript:
-
Professor Frisby's Mostly Adequate Guide to Functional Programming (in javascript) (HN). Also see:
- ES6 Tail Call Optimization Explained
- Trampolines in JavaScript
- (also [Paste from holmberd](http://paste.ubuntu.com/ 24568118/))
- lemonad
- Rambda
- Introducing Ramda " Ramda includes all of the favorite list-manipulation functions you expect, e.g. map, filter, reduce, find, etc. But Ramda is significantly different from libraries like Underscore and Lodash. ..."
- All About Recursion, PTC, TCO and STC in JavaScript
-
-
Python:
-
- main Github repo? (HN)
- also: pipetools, itertools
- main Github repo? (HN)
-
Functional programming in C++ (John Carmack) (alternative link)
-
Lua Functional (docs, HN) (also, functional-lua)
-
The FSet Functional Collections Libraries (Common Lisp) (Github)
Functional programming courses
-
Introduction to Functional Programming: the interesting part here may be that this course is said to show "that good OOP code is actually functional". (I haven't verified, but would expect it to show why you want your objects to be immutable, which applies to the
FP::Structmodel.) -
Purely Functional Data Structures for the Impure (by osmaferon) (source)
Functional programming in various contexts
-
Pure UI, on purely functional composition of a user interface (using the React JavaScript library)
-
Write code that is easy to delete, not easy to extend: even though the article doesn't mention functional programming, it helps this aim (pure functions don't depend on state, hence dependencies are on code only)
-
in which we plot an escape from the quagmire of equality, nice citation: (...) referential transparency allows you to have much greater confidence that your code is correct. Without it, the best you can say is "as long as the rest of this program behaves itself, this function should work". This works a lot like older OSes with cooperative multitasking and no process memory isolation; also discusses equality, and proposes adding immutable data types to Emacs.
-
The Problem With Single-threaded Shared Mutability, including the citation: My intuition is that code far away from my code might as well be in another thread, for all I can reason about what it will do to shared mutable state.
Testing
-
How I Write Tests (Functional Perl helps satisfy most of these points; "Write lots of fakes" may really be asking for a monad abstraction.) (HN), also Design for Testability
-
See how well Test::RandomCheck works. Look for inspirations from Hypothesis, a Python testing framework for property based testing.
Experiments
-
The list monad in Perl and Python (by mjd, author of Higher-Order Perl) (HN)