Recursion: An Indispensable Tool For Every Functional Programmer [Example With Insertion Sort]

This is the first of a series of articles that illustrates functional programming (FP) concepts to imperative programmers. As you go through these articles with code examples in Haskell (one of the most popular FP languages), you gain the grounding for picking up any FP languages quickly. Why should you…

Programming with Envelopes in OCaml and Haskell

In this post, I continue going through the famous paper “Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire” by Meijer et al.  They show that we can treat recursions as separate higher order functions known as recursion schemes.  Each of the four things in the paper title corresponds to…

Using Unfolds to Iterate in Haskell and OCaml

This post picks up from where we left off here, in which I explained anamorphisms.  Here we look at another example of applying unfolds: iterate.  Iterate Iterate is one of the most common uses of unfold.  The definition of the iterate function is: iterate f x = Cons (x, iterate…

Programming with Lenses in Haskell and OCaml

In this post, I continue going through the famous paper “Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire” by Meijer et al.  They show that we can treat recursions as separate higher order functions known as recursion schemes.  Each of the four things in the paper title corresponds to…

Eliminating Run Time Errors In OCaml and Haskell

Run Time Versus Compile Time Error Run time errors are those that happen when the program runs, as opposed to compile time errors which happen when the program compiles.  In a sense, having compile time errors is no big deal, because the errors guarantee that the ill-defined program won’t be…

Folding Nonempty Lists in OCaml and Haskell

In the last post, I talked about catamorphisms in Haskell.  Specifically, the advantages of the foldr1 or foldl1 option in Haskell.  Namely, (1) not needing to specify the base case and (2) preserving polymorphisms in all applicable types.  In this post, I will show another way to fold nonempty list…

Programming with Bananas in Haskell (Versus OCaml)

In the last post I talked about catamorphisms in OCaml.  In this post I compare that with Haskell.  We’ll see that Haskell gives you more options when implementing catamorphisms.  You don’t need to know Haskell to understand this post, I’ll introduce the required Haskell syntax along the way. Catamorphisms in…