The enchanted electrical website of Dr. Sinclair
-
Type Classes: Things I wish someone had explained about functional programming
Written by James SinclairType classes are not the same thing as algebraic structures. But you’ll find many people use the terms interchangably. And that can be confusing. It confused me for a long time. In this article we look at what type classes actually are. And we’ll also look at why programmers from other languages are so enthusiastic about them.
-
Algebraic Structures: Things I wish someone had explained about functional programming
Written by James SinclairAlgebraic Structures are something I wish I’d understood better, sooner. I had a hazy idea of what they were, but didn’t know the correct terminology. That was a massive barrier to finding out more. This article is my attempt to stop that happening to others. We’ll look at: What are algebraic structures? How do we use them in JavaScript? Why would we bother? What’s the big deal?
-
Things I wish someone had explained about functional programming
Written by James SinclairIt’s hard learning functional programming on your own. But it ought not to be. You don’t need a PhD to understand functional programming. The concepts are abstract, yes. But that doesn’t make them incomprehensible. It shouldn’t be this difficult. This is the first in a four-part series on things I wish someone had explained to me about functional programming.
-
Functional JavaScript: What are higher-order functions, and why should anyone care?
Written by James Sinclair“Higher-order function” is one of those phrases people throw around a lot. But it’s rare for anyone to stop to explain what that means. Perhaps you already know what a higher-order function is. But how do we use them in the real world? What are some practical examples of when and how they’re useful? Can we use them for manipulating the DOM? Or, are people who use higher-order functions showing off? Are they over-complicating code for no good reason?
-
Functional JavaScript: Traversing Trees with a Recursive Reduce
Written by James SinclairTrees come up a lot in web development. As in, more than you would expect. They pop up all over the place. But trees can be tricky. If you’re like me, you know that there ought to be a way to process them neatly. You might want to change all the values, or make some calculation on the tree. But the way to do it isn’t always obvious. And utility libraries like Ramda or Lodash don’t come with tree-traversing functions. So, what do we do?
-
Magical, Mystical JavaScript Transducers
Written by James SinclairTransducers are very cool. They give us a lot of power. But they are also a bit abstract. And that makes them hard to explain. But they also embody the dream of functional programming. We write tiny, simple functions. Then we piece them together with flexible tools that work for lots of different data structures. And we end up with powerful, performant programs.
-
Functional JavaScript: Five ways to calculate an average with array reduce
Written by James SinclairThe JavaScript array reduce method seems to give people trouble. Part of the reason is that many tutorials start out using reduce only with numbers. So I wrote a previous article about the many other things you can do with reduce that don’t involve arithmetic. But what if you do need to work with numbers? How do you use reduce for real-world arithmetic problems?
-
Functional JavaScript: How to use array reduce for more than just numbers
Written by James SinclairThe array reduce method is really powerful. But people often run into trouble as soon as they step beyond the basic examples. Simple things like addition and multiplication are fine. But as soon as you try it with something more complicated, it breaks. Using it with anything other than numbers starts to get really confusing. I think this is because the examples in most tutorials mask some of what’s going on. This article looks at some of the more interesting things you can do with
.reduce()
that better show how it works. -
Elegant error handling with the JavaScript Either Monad
Written by James SinclairJavaScript gives us a built-in language feature for handling exceptions: try…catch statements. And they’re better than littering our code with if-statements. But they can be problematic. And they are not the only way to handle errors. In this article, we’ll take a look at using the ‘Either monad’ as an alternative to try…catch.
-
How to run async JavaScript functions in sequence or parallel
Written by James SinclairThe async and await keywords are a great addition to Javascript. They make it easier to read (and write) code that runs asynchronously. But they can still be confusing. Asynchronous programming is hard. Anyone who tells you differently is either lying or selling something. But there are some simple patterns you can learn that will make life easier.