RSSAmplifier

Blog

Hasufell's blog

github.comRSS feed ↗8 posts

Latest posts

Yet another opinion on LLMs

TOC Opinion What is good use of LLMs Using LLMs to build things What now? Opinion After I’ve been exposed to LLMs more frequently at work doing Haskell, there are a couple of things that have crystallized for me: they are exceptionally poor at reasoning they lie more often than not they are gigantic guessing/templating machines What is good use of LLMs The issue with using LLMs isn’t just the…

Dynamic GHC matrix in GitHub CI

TOC How to Reacting to failures All put together A few notes Prior Art How to When new GHC versions are released, I often have to go through all my library CI systems and update the ghc version matrix in my github action. You could argue a CI generation system like haskell-CI makes this somewhat simpler, but I’m a strong opponent of generating CI configurations, because: it makes debugging harder…

April fools': GHCup discontinued (or why you should use Nix)

After working on GHCup for 6 years, I’ve realized that it’s obsolete. Everyone should just use nix . Nix is a purely functional package manager with declarative configuration, reproducible builds and high quality packages. In fact, it is so simple that you just have to understand: the nix package manager: https://nix.dev/manual/nix/2.26/store/ the nix language:…

The ultimate guide to Haskell Strings

This guide is aimed at Haskellers who seek to improve their understanding of String types, be it beginners or seasoned developers. It is also meant to be a quick reference/cheat sheet for deciding which string type to use in a given situation. TOC Motivation String in Prelude Unicode Unicode Code Point UTF-32 UTF-16 Unicode Scalar Values UTF-8 Unicode summary Back to Haskell String type String…

Getting your Haskell executable statically linked without Nix

Motivation Following the excellent post from Tom Sydney “Getting your Haskell executable statically linked with Nix” , I want to present an alternative approach. I believe nix has questionable ergnomics and most Haskell developers don’t need it, even if they want to link their binaries statically. Musl and Alpine Linux GHC/cabal don’t really know how to do partial static linking, unless you employ…

GHCup is not an installer

Misunderstandings Over the past few years, there have been recurring questions or misunderstandings about GHCup. E.g.: GHCup only installs bindists from upstream (e.g. GHC/Cabal/HLS CI) GHCup never applies patches to tools it distributes Both those assumptions do not apply, because GHCup is primarily a distribution channel , not just an installer. The distribution channel is basically the…

Fixing 'FilePath' in Haskell

I’m pleased to announce that the Haskell type type FilePath = String has a successor, which was first discussed many years ago as the Abstract FilePath proposal (AFPP) . The new type shipped with the filepath-1.4.100.0 package is: -- * Path types -- | FilePath for windows. type WindowsPath = WindowsString -- | FilePath for posix systems. type PosixPath = PosixString -- | Abstract filepath,…

From conduit to streamly

Motivation At GHCup I recently put a lot of effort into reducing the dependency footprint to improve build times. Since conduit was not a direct dependency and only used for yaml parsing and some other things, I replaced those deps with alternatives or re-implemented them (like logging). yaml , which uses conduit under the hood, was replaced with HsYAML , but to my despair… that turned out to be…