Home

Evolving the Fibonacci

We all know about the Fibonacci sequence. Some of us also know a song that uses it to achieve a spiraling feeling (yes, Tool fans!). In Haskell: fib 1 = 0 fib 2 = 1 fib x = fib (x - 1) (x - 2) 0 1 1 2 3 5 8 … That’s it. Story ended. Well not quite. Let’s see a language where we can reason about the execution, because I can’t in Haskell. Sc...

Read more

Finding Shortest Paths In Graphs In Haskell

As a rookie Haskeller coming from imperative languages I am still often shocked how elegantly mathematical problems can be expressed in this great language. Last time a wrote a blogpost about recursion. As an example, I presented the Relation type and implemented an operation to it I called join. If you are familiar with relational algebra you m...

Read more

FP Training @ RS: Recursion

Agenda Example 1: factorial Example 2: map Example 3: join 1. We implemented the factorial example in JavaScript imperatively: function factorial (n) { var prev = 1 for (var i = 1; i <= n; ++i) { prev = prev * i } return prev } Here prev is mutated, so this is not allowed in pure functional languages. How can we solve ...

Read more

Curious logging activity

The heartbeat of our logs Logentries draws a neat linechart to visualize your logging activity. This chart is great for seeing if there are any errors appearing after a change, so you see at a glance if it’s worth to check the logs. Looking at one of our services, this chart caught my eye: At first sight this doesn’t say very much apart from...

Read more

Type variance explained

Reasoning about subtype relations between parameterised types tend to confuse developers. If you are a Java developer you've probably seen the syntax ? extends T and ? super T, or might even used it to create flexible method signatures. I was very confused at first when I tried to use them as their meaning wasn't clear to me. So, I just placed e...

Read more

Java, the bad parts: Recursive lambdas

Have you ever tried to create a recursive lambda in Java? You might ask why on earth would somebody do that. For you I have a confession to begin with: I've been spoiled. I've been spoiled with the overwhelming expressiveness of functional programming. I've been using Scala and JavaScript for more almost 2 years now, and that leaves a trace. I ...

Read more

Monoids

Monoids Monoids are algebraic structures that have an identity element and an associative binary operation. So what is a monoid? It’s a … trait Monoid[A] { def mempty: A def mappend(a0: A, a1: A): A } defined trait Monoid … and the associativity and identity rules which cannot be enforced by Scala 😞 Okay, but what can we do with it? ...

Read more