# Functional programming

Effekt seems like a neat language. The Dao of Functional Programming is a nice read.

## Notes

- A monad is an abstraction that can be used to parametrize code with the way how computations are sequenced. A monad can also be seen as design pattern, that sometimes makes your code more readable (and, more often, less readable).
- Think of monads as of codification of imperative effectful computations in a more general way.
- Monads are a pattern of using types to encapsulate some data.
- Ah, the functional paradigm. Your brain is screwing with you. You have to stop thinking about telling computer when to do things, you know, do this, then do this, then do this... let computer decide when to do what. Your brain is confused and is trying to tell computer in which order to do things, but did you ever think about the order when creating Excel spreadsheet with formulas? Clojure is like Excel. You focus on the formulas, and Clojure figures out order of execution.
- If you have a pure function that is deterministic, its entire call can be replaced with the output. This is referential transparency. If you store outputs in a cache and map inputs to cache locations, sometimes you avoid calling entirely by just hitting the cache. Referential transparency is the property being leveraged. Caching and mapping inputs is the implementation detail. Memoization is the name of this implemented behavior.

## Links

- List of FP Resources
- Introduction to Functional Programming (2020)
- Teens and Functional Programming
- Conversations with a six-year-old on functional programming (HN)
- FP Resources
- OOS is dead only if FP is dead
- Total functional programming (ESFP) literature
- Having an Effect by Oleg Kiselyov
- Monads Demystified (2015)
- Can functional programming be liberated from the von Neumann paradigm? (HN)
- COMP 212: Functional Programming Course (2019) - Purpose of this course is to introduce the theory and practice of functional programming (FP).
- Research papers / Functional pearls - Functional pearls are elegant, instructive examples of functional programming.
- Effects bibliography - Collaborative bibliography of work related to the theory and practice of computational effects.
- Flerp’s Guide to Functional Programming - Collection of the resources I've found most useful when exploring the world of functional programming.
- George Wilson - The Extended Functor Family (2016)
- Functional Programming for the Long Haul by Michael Snoyman (2019)
- Selective Applicative Functors - Declare Your Effects Statically, Select Which to Execute Dynamically.
- What makes a function pure? (2018)
- Foundation of Functional Programming Course (2019)
- Theory of functional programming with Eric Normand (2019)
- Applied Functional Programming Course
- Effects - Brief exploration of the various approaches to modeling side effects in a purely functional programming language.
- Code and materials for book "Functional Design and Architecture" (2019)
- Practical Functional Programming: Prelude (2018)
- Postmodern Programming - Talk about declarative programming in and around imperative code: what, why, and how.
- The Science of Functional Programming book (HN)
- Foundation of functional programming course
- Discrete Mathematics and Functional Programming book (2012)
- TypeFunc - Resources for type theory, functional programming, etc.
- Functional Programming Course - Structured according to a linear progression and uses the Haskell programming language to learn programming concepts pertaining to functional programming.
- Structure and Decomposition of Computer Programs book (2019)
- Speaker Interview with Edward Kmett (2019)
- Why Isn't Functional Programming the Norm? – Richard Feldman (2019) (HN) (Lobsters)
- Purely Functional Data Structures by Chris Okasaki (1996) (OCaml Code)
- A Type of Programming by Renzo Carbonara
- 3 examples of algebraic thinking (2019)
- Functional Design and Architecture book (2021) (Reddit) (Web)
- Sara Fransson: Functional lenses through a practical lens (2019)
- Algebraic structures: things i wish someone had explained about functional programming (2019) (HN)
- MLKit - Standard ML Compiler and Toolkit.
- ICFP 2019 preprints/papers
- Functional Programming Jargon (HN)
- A Glossary of Functional Programming
- Functional programming design patterns by Scott Wlaschin (2014)
- PhD Abstracts for functional programming (2020)
- Luka Jacobowitz—Monoids, Monoids, Monoids (2019)
- Selective Lambda Lifting (2019)
- Recursion Scheme Talks
- Domain Modeling Made Functional - Scott Wlaschin (2017) (Book) (Code)
- The Implementation of Functional Programming Languages book (1987)
- Functional programming great resources
- On the Expressive Power of Indexed Applicative and Monadic Structures (2018)
- Functional Programming for Domain-Specific Languages
- Monads for functional programming
- Effect Handlers via Generalised Continuations (2020)
- The general value of typed functional programming lies in leaving no edge cases (HN)
- Developing Statically Typed Programming Language (2017) (HN)
- Runners in action (2019)
- Seminaïve Evaluation for a Higher-Order Functional Language
- Counting Immutable Beans (2020) - Reference Counting Optimized for Purely Functional Programming.
- What's the best functional language to learn over the next 30 days? (2020)
- Exercises for the course 'Functional Design by John A. De Goes'
- Breaking down "A monad is just a monoid in the category of endofunctors"
- Chalmers Online Functional Programming Seminar Series
- Ask HN: How to be fluent in functional language speak? (2020)
- A Quick Look at Impredicativity (Simon Peyton Jones) (2020)
- Purely Functional Data Structures and Monoids (2020)
- Designing a functional programming language: Yatta (2020) (HN)
- Malfunction - High-performance, low-level untyped program representation, designed as a target for compilers of functional programming languages.
- Practical type inference for arbitrary-rank types (2007)
- Monads in 15 minutes: Backtracking and Maybe (2007)
- Functional Code is Honest Code (2020) (Lobsters)
- Talk: Denotational Design: from meanings to programs
- Functional Programming for Array-Based Parallelism (2020) (HN)
- Graham Hutton: Publications
- Queensland Functional Programming Lab (GitHub)
- List of useful resources to learn typed FP
- Monads and Mom (2020) (Lobsters)
- Learn Functional Programming Design from Redux (2020) (HN)
- Imperative functional programming (1992)
- Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire (1991) (Web)
- Monads, Explained Without Bullshit (2020)
- Is Haskell good for learning functional programming? (2020)
- Functional lessons learnt (2019)
- Algebra-Driven Design book - Elegant Software from Simple Building Blocks. (Lobsters)
- What is functional reactive programming
- Implement Box functional data structure
- CS316 “Functional Programming” course (2020)
- Of Groups and Monads (Lobsters)
- Compositional Podcast - All about functional programming in practice.
- Understanding Combinators using Elm
- Objects in Functional Languages (Lobsters) (HN)
- Functional Christmas
- Lambda the Ultimate Pattern Factory - FP, Haskell, Typeclassopedia vs Software Design Patterns.
- Reconciling concepts from FP and OOP (2020)
- Book of Monads - Provides a journey from the very first concepts, to the myriad of monads available to programmers, down to the categorical foundations. (Code)
- Functional Pearl: It’s Easy As 1,2,3 (2021)
- Functional pearl: getting a quick fix on comonads (2015) (Code)
- Fool's scriptum on functional programming - Course about purely functional programming in JavaScript based on the scriptum library.
- PhD research notes on using pure functional programming for implementing Agent-Based Simulations (ABS)
- Cube Composer - Learn Functional Programming Visually. (Code) (HN)
- Myth - Type-and-example-driven program synthesis for functional programming languages.
- Profunctor Optics: Modular Data Accessors (2017)
- OCaml, Erlang, and Functional Programming with Leandro Ostera (2021)
- Functional Programming Slack
- Can continuation passing style code perform well? (2021) (HN) (Lobsters)
- Algebraic Types' Series Expansions (2021)
- Implementing Functional Languages: Tutorial by Simon Peyton Jones and David Lester (2000) (Code)
- Domain Modeling Made Functional with Scott Wlaschin (2020) (HN)
- Functors and Monads for People Who Have Read Too Many “Tutorials” (2021) (HN)
- The Y Combinator (Slight Return) (HN)
- The mysterious Y combinator (2020)
- ICFP 2021 - Research Papers
- A Functional Programming Language with Versions (2021)
- Why is learning functional programming so damned hard? (2019) (HN)
- Review: Why FP Matters (Hughes) (2021)
- Monad Tutorial
- Monads are monoids in the category of endofunctors (HN)
- Functional programming is not popular because it is weird (2016) (HN)
- List Homomorphisms and Parallelism (HN)
- Programs as Values, Part I : Intro & Compositionality
- Random Permutations and Sorting
- Meta-learning and Monads (2021) (Tweet)
- Functional Algorithms, Verified (2021) (HN)
- Std: Execution, Sender/Receiver, and the Continuation Monad (2021) (HN)
- PCF - Tiny typed, higher-order functional language. Compiled to C.
- Functors, Applicatives, and Monads in Pictures (2013) (HN)
- United Monoids (2018) (Code)
- Seemingly impossible functional programs (2007) (HN)
- Distillation: extracting the essence of programs (2007) - Transformation algorithm called distillation which can automatically transform higher-order functional programs into equivalent tail-recursive programs. (Code)
- On the correctness of monadic backward induction (2021) (Tweet)
- What exactly is functional programming (and it's benefits)? (2021)
- Journal of Functional Programming (Goes Open Access) (HN)
- Algebraic Data Types in 10 Minutes – Daniel Rogozin (2021)
- The Decent Way to Learn Functional Programming (2012)
- Lightweight higher-kinded polymorphism
- Implementing a Functional Language with Graph Reduction (2021)
- What's awesome about functional programming (2021)
- Why are imperative programs considered faster than their functional counterparts? (2021)
- Provably space-efficient parallel functional programming (2022) (HN)
- Foundations of Functional Programming/The λ-cube (HN)
- Functional Programming Papers Notes
- High-order Virtual Machine (HVM) - Pure functional compile target that is lazy, non-garbage-collected and massively parallel. (Reddit) (HN) (HN) (Lobsters)
- Eric Normand - Grokking Simplicity
- What Color Is Your Monad (2022) (HN)
- Async/Await is really just a subset of monads and do-notation for imperative languages
- How to Use Monads without Understanding Them (2022) (Reddit)
- Functional Manipulation of Bit Streams
- Does Rust prevent more logic bugs than statically-typed pure FP languages? (2022)
- The Reader Monad — Example & Motivation (2018)
- How side effects work in FP (HN)
- Monads (2022) (Lobsters)
- Two Vexing Problems in Functional Programming (2022) (HN)
- Functional Programming Is Boring - Short course on Functional Programming in Typescript.
- Notes on Functional Programming and related topics
- Theory and Applications of Lenses and Optics
- schmu - Small, mostly functional programming language which compiles to native code.
- A Taste of Roc — Richard Feldman (2021)
- Zilch - Statically-typed, low-level, functional programming language with some focus on runtime performance.
- At the boundaries, applications aren't functional (2022)
- Template for Hindley-Milner based languages
- Selective applicative functors - Abstraction between applicative functors and monads.
- Utrecht Advanced Functional Programming Summer School
- Functional Programming in Bologna
- The Dao of Functional Programming (2022) (Code) (HN)
- Teika - Functional programming language.
- Gren - Functional programming language with carefully managed side-effects and a strong static type system. (Web) (Twitter)
- Grin - Simple functional language.
- Purely functional data structures in HVM
- Awesome Functional Programming
- Pearls of Functional Algorithm Design (2010) (OCaml Code)
- Functional Programming 101
- Why study functional programming? (2012) (HN)
- A monad is a monoid in the category of endofunctors. Whats the problem? (2022)
- "Outperforming Imperative with Pure Functional Languages" by Richard Feldman (2021)
- Functional Reactive Programming (HN)
- Learning Path for Functional Programming
- Lambda Days - One of a kind experience in the functional world. (Twitter)
- SubML - Language provides polymorphic types and subtyping, but also existential types, inductive types and coinductive types.