Config languages (and Dhall)
Haskell Community [Unofficial]
April 18, 2026
I’ve been tinkering with Dhall in GHCup: ghcup-metadata/dhall at installer-dsl · haskell/ghcup-metadata · GitHub
But my feeling was it is not a good fit:
- no text comparison
- updating deeply nested Maps is very hard
- syntax seems very verbose (e.g. all the explicit type parameters for fold/map/combine)
- maintenance seems to be on life support?
GHCup metadata is essentially:
type GHCupDownloads = Map Tool ToolVersionSpec
type ToolVersionSpec = Map GHCTargetVersion VersionInfo
-- VersionInfo has a record for ArchitectureSpec
type ArchitectureSpec = Map Architecture PlatformSpec
type PlatformSpec = Map Platform PlatformVersionSpec
type PlatformVersionSpec = Map (Maybe VersionRange) DownloadInfo
But writing this map manually as a human is very tedious. So the idea is to have something more flat and then turn it back into the nested structure, which requires updating the deeply nested maps while processing the data. I was able to write Dhall code that does that, but it’s super convoluted and does not seem idiomatic.
So I wonder: are there any alternatives?
I also tried cue, but it’s bad at templating. The only other thing that caught my eye was Nickel from Tweag. But it is turing complete and at that point I could just do the whole shebang in Haskell.
Discussion in the ATmosphere