Lambda world Cádiz, one of the most important conferences on functional programming in Europe, took place in Cádiz on October 25 and 26. A software development team from Apiumhub was there attending some of the talks. Since the lectures and the workshops took place in several simultaneous tracks, we could not attend all of them, so we will explain to you those we went to and give you some highlights.

Lambda World started with an unconference where several people gave lightning talks.

 

Lambda World unconference 

It was an interesting part, the first speaker was Juan Manuel Serrano, CTO of Habla Apps, who was also a speaker at Software Crafters BCN 18. His talk was about solving a problem that required dependent types for which he used Scala + Shapeless, but also implemented the same solution with Agda. Very interesting! He showed us how to extend the Scala native Collection types and left us with eager to explore more.

The next lightning talk was led by José Escanciano, chief architect of Addison Global. His talk was about the architecture they have implemented in MoPlay, programmed in Scala and making a strong use of microservices and reactive programming. An architecture based on CQRS and Event sourcing and with an interesting approach.

Nikita Tchayka showed Eta lang and its interoperability with Java, Scala and other languages of the jvm using a language based on Haskell.  

The next talk also dealt with Haskell, but this time Haskell in live coding. Alejandro Serrano programmed the same implementation that Juan Manuel Serrano taught in Scala and Agda, but in Haskell. Awesome!

The unconference ended up with a talk by Pepe García, from 47Deg, who gave us an interesting point of view on how to combine parsing methods to encapsulate the logic of parsing. After that, he explained the use of Contravariant and other typeclasses to achieve a customized printing and closely linked to its counterpart, the parsing.

 

Lambda World workshops

The workshops were of a high level!

The first workshop we went to was about “Building your own Monads” and with the speaker Alejandro Serrano again on the stage we received a new dose of Haskell.

He did an exercise in which we designed and implemented our own monad. The example that he chose was about the game “Tik-tak-toe”.
Alejandro explained three ways of creating our new monads, initial style, final and operational style, initially in Scala and Haskell and finally showing the Haskell implementations and explanations on blackboard. A very interesting talk where we opened the world of the Free Monad, the Freer Monad, the difference with the Free Monad of Scala and how this helps us to abstract a large part of the implementation of our own and customized monads.

After lunch we went to the workshop called “A strongly typed martini. Shaken, not stirred “about refined types in haskell. There we could learn about LiquidHaskell, which through “comments” or “annotations” gives us more power over pure haskell code, similar to how Flow brings types to Javascript. The refined types, something that we had already seen in Scala, is about the combination of a type and a predicate that provides an extra level of restriction that simple types do not provide. They carried out a series of exercises refining types, in the domain of cocktails, glasses and “shakers” in which we ended up defining a logic “quite” complex that lived entirely in the predicate of the refined types, very interesting and something to keep in mind from now on!

Once the workshops were over, the talks began. There were of all levels. Many of them were about Scala and Haskell although some about Java and even Javascript, the ones we went to.

Jean-Baptiste Giraudeau gave a masterly talk on how to program exceptionally well in Java using functional programming. It was nice to see that not everyone has taken the step to Scala, and that you can do exceptional things in Java.

We went to the talk How to get away with functional programming in frontend applications, to see what opinion people had about Javascript in these conferences, news and so on. The chat itself was not bad, however, he talked too much about Flow and Typescript and didn’t dedicate a lot of time to functional programming in frontend.

And the day 1 was ended up with a keynote of Koko Muroya and Steven W.T. Cheung, PhD students at the University of Birmingham. A talk covered more the part of a scientific field rather than the practical one, in which they taught what a functional program really does when you execute it, showing diagrammatic models to understand which paths our programs follow, using their own programming language, the one that they are developing. With very interesting examples they showed us how a function is evaluated depending on whether you ask for an evaluation strategy or another one (call-by-value, call-by-need) as well as the the benefits that a generator of diagrams gives us for code like yours .

And here begins day 2 full of interesting and motivational talks. The first one was a fantastic keynote of Felienne Hermans. Unlike the closing keynote of day 1, this keynote went to the opposite extreme, nothing technical, but scientific! Felienne talked about her life, about how she discovered (and created a dissertation about it) that excels are programs, and that people who work with them are actually programmers and that they have their own language. She talked about something that caught our attention: we do not have a common way of reading code. Each one reads the if and the for in a different way. How can we teach children to program then, if each person tells them something different about the same concept? A talk that did not deal with the functional programming and that nevertheless seemed to us to be the best in the Lambda world.

And since we had not received our dose of haskell yet, we went to Headfirst Haskell in the hope that they would give us advice and a path to follow for those who want to start with this language. Abby Sassel told us about her year learning Haskell and the advice she could give in this regard. It was less technical than we expected, but it gave us many ideas.

And then, we came back to Javascript session. Flavio Corpa in Functional Lenses in JavaScript gave us a pat on the back to all those who program in Javascript using Ramda and lenses, making us see that we are not alone and that it is a useful technique used in the world of functional programming.

One of the talks that filled the room was Testing in the World of Functional Programming, by Luka Jacobowitz. In a world like functional programming where testing is not “as much” considered as in the OOP, Luka explained, among other things, what gives us the property based testing, limitations it has. And how to solve some of these limitations with, for example, refined types in Scala.

Itamar Ravid gave us examples of the use of many concepts in Scala, demonstrating the practical use of various concepts such as Writer, WriterT, IO, IndexedStateT, Co-products, Codensity, a talk closely linked to the one given by Paweł Szulc ( A roadtrip with monads: from MTL, through tagless to BIO ) where he used a large part of these concepts and many more not mentioned above in a brutal refactor towards a totally abstract code, with a good analysis as to what each phase of the refactor had contributed (and removed).

And the last talk (The Complexity Trap: Think Before You Leap) we went to was one that explained us: All this is really good, but we do not have to lose sight of the accidental complexity that we bring. That we do not have to obsess about abstraction, because it has a cost. Boring solutions are sometimes beneficial.

The conference ended up with a keynote about the imposter syndrome, something that most of the people in the room had felt at some point. Another keynote nothing technical but that made many people feel better.

Our conclusions with these talks are that it is necessary to have a medium-high level of functional programming to be able to understand what is being talked about, it is also a springboard to learn concepts, ideas and technologies that will keep you busy the whole year until the next Lambda World. The levels are diverse, since you can go to talks about javascript, where the use of functional programming is rather practical, and you can also go to talks about type level programming in Scala and from there to non-technical talks that help you or give ideas.

Lambda World is a great conference if you want to enter this world and fill your notebook with concepts that you are eager to learn!

 

If you would like to know more about Lambda World, I highly recommend you to subscribe to our monthly newsletter by clicking here.  

 

And if you found this article about Lambda World interesting, you might like…

 

Software Crafters Barcelona highlights

Scala generics I: Scala type bounds

Scala generics II: covariance and contravariance  

Scala generics III: Generalized type constraints

BDD: user interface testing

F-bound over a generic type in Scala

Microservices vs Monolithic architecture

“Almost-infinit” scalability

iOS Objective-C app: sucessful case study

Mobile app development trends of the year

Banco Falabella wearable case study 

Mobile development projects 

Viper architecture advantages for iOS apps 

Why Kotlin ? 

Software architecture meetups

Pure MVP in Android 

Be more functional in Java ith Vavr