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…
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…
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:…
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…
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…
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…
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,…
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…