Domain-specific languages are a powerful tool for structuring programs. In this article, we focus on the challenge of composing programs from multiple DSLs. We present an efficient and extensible approach by combining two complementing patterns: Tagless Final and free monads, specifically the Eff monad.
Tag: Functional Programming
Monads are valuable tools for handling various concerns in functional programs. In this article we show how domain-specific languages and the Tagless Final pattern can be utilized to build modular monadic programs.
Für einige ist Programmieren nicht bloss ein Job, sondern eine Kunst – und für andere ein Handwerk. Was aber ist ein guter Entwickler? Ist Code ein Handwerk? Und was hat ein Programmierer mit einem Rockstar gemeinsam? Wir machten uns auf die Suche nach Antworten.
Imperative programming makes it easy to write complex programs, but hard to write correct ones. One reason for this is that imperative languages refuse to properly deal with effects. The article shows why effects should treated as first-class citizens and how things can be improved by switching from imperative to functional programming.
Estimated reading time: 8 minutes
If you ever have been asked to query a database as Scala developer you most probably already heard of Slick. Today I'd like to share some of my best practices I learned during the last year working with Slick with five do's and don'ts.
In the previous post Cooking with Akka, we modeled a bar's breakfast service with the help of the Akka toolkit. Now we want to introduce the concept of elasticity from the Reactive Manifesto. For this task we will continue with our analogy.
After the wonderful Cooking with Monads blog article from Andreas Hartmann and in connection with the Reactive Manifesto, we are going to dig a bit deeper into the subject of reactive applications with a simple demo.
As a programmer endeavouring to discover the world of functional programming, you will sooner or later be confronted with the concept of monads. Monads are an incredibly useful construct for dealing with a multitude of software design challenges.