Hatter is like flutter but instead of dart, haskell!
Write native mobile apps in Haskell! This works similar to react native where we have tight bindings on the existing UI (user interface) frameworks provided by android and iOS.
Code? Reading code is such a 2025 activity, now we just vibe! We should adapt our software such that it’s easier to read for machines. Tokens burn down trees, y’know. So we should minify!
For example, consider this program:
module Main where
main :: IO ()
main = putStr $Hello 👋 Recently there was some discussion around forking basement as baseplate. After some investigation I found out the basement library isn’t all that useful, so I decided to fork memory instead, as ram, which no longer depends on basement.
This follows the recent crypton/cryptonite fork. Crypton now also
It was Friday, 27th of February 2026, when I was reborn. bro. I’m vibe coder now. bro. for real.
Hi friends! I was recently tasked again with figuring out where stuff is in space. I decided this was an opportunity to cleanup the esqueleto library and releasing v4! Friends, I lied. I was in fact terrified I did the projections of geography wrong by using the geometry type, and
Have you ever seen a
!-->
September 2023, I knew I was in for a wild ride when I won this contract. I already coached other developers in a commercial setting, and I understood what was asked
I joined the Haskell Stability Working Group about a year ago. I was freshly scarred from a GHC upgrade, so I decided to try improving the situation. I think my first contribution was making an example for GHC nightly builds on GitHub Actions. This allows
For a long time, I’ve been annoyed that cabal tells you to add modules to your cabal file. It can detect missing modules, but won’t automatically add them. This is not a big deal for a single module, but if you like splitting code into many small modules, for example
I’ve updated the esqueleto bindings for esqueleto-textsearch to include a tutorial and documentation so it no longer requires guesswork. Furthermore I’ve also created new esqueleto bindings for PostGIS.
Esqueleto is a more advanced query library that builds on top of the persistent ORM1. Postgres text search
Good news! I’ve come to an agreement with the maintainer of mysql-haskell, winterland. I’ll become a co-maintainer.
What this means in practice is that I’ll deprecate mysql-pure and merge the changes back into mysql-haskell. This will make upgrades far more convenient for users. That’s you! It isn’t
I’ve forked mysql-haskell and persistent-mysql-haskell into mysql-pure and persistent-mysql-pure. The original packages were no longer maintained and frequently caused me issues during GHC upgrades, so I decided to take over maintainership. For example, bounds were outdated, or I needed minor patches found on obscure branches in unrelated repositories.
Recently I encountered some dubious error handling code. Not only was it failing, it was failing WRONG 1. This frustrates me because doing failing correctly in Haskell is quite easy, so why was it implemented wrongly? I believe no-one has addressed failing
Recently a blog post came out which I quite like, it describes how to use the concrete base transformers. It’s very thorough and gives a concrete example for using transformers. Although it looks quite low level and I think you’ll get more out of transformers by using full
In the previous blog post we saw interaction with servant in reflex. Although that covers the basics, there are several more hurdles to overcome to get comfortable with Reflex. I think most of these are encountered by building a simple login system. So let’s build something like:
+------------------+
+-----------+ |All newtypes are isomorphisms
– My mother
Control.Lens.Wrapped uses the isomorphism property to introduce a type class Wrapped. Let’s explore use cases, because after all, it doesn’t appear to do much at first glance. What’s the point of formalizing wrapping and unwrapping of
In the pragmatic haskell series, we saw how to setup a simple webserver with database. But at some point you still need a frontend. If it were 2005 you may have been able to get away with just blaze. But we are in 2018+, and JavaScript is a problem
Note, I no longer recommend using beam for business as ORM. Please use persistent instead. Beam is far to complicated for it’s use case. Migrations can be run with postgresql-migration for example, using the suggested migrations from persistent. I’d only recommend using beam for hobby projects or as a case
Most Haskell language guides will leave IO until later. This guide is different, this guide is about using Haskell. Our focus is different: We build first, then learn trough delight.
There are many guides available for learning Haskell. Setting up a something simple like a web server isn’t so straight forward. Perhaps choosing one of the 14 libraries is a bit much.
Working at Daisee, Jappie uses a lot of Haskell programming. Although Haskell is obviously as amazing as the stereotype asserts, the tooling can be a bit challenging. In this blogpost we explore these challenges.
One’s understanding start with the fact that there is not one unified