{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigtq45hourt52rva44ytuzf7dsgfx5kgod4rvni6stcc5vlndxmku",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mjrl7gnvasj2"
},
"path": "/t/config-languages-and-dhall/13948#post_1",
"publishedAt": "2026-04-18T12:27:02.000Z",
"site": "https://discourse.haskell.org",
"tags": [
"ghcup-metadata/dhall at installer-dsl · haskell/ghcup-metadata · GitHub",
"Dhall code",
"cue",
"Nickel"
],
"textContent": "I’ve been tinkering with Dhall in GHCup: ghcup-metadata/dhall at installer-dsl · haskell/ghcup-metadata · GitHub\n\nBut my feeling was it is not a good fit:\n\n 1. no text comparison\n 2. updating deeply nested Maps is very hard\n 3. syntax seems very verbose (e.g. all the explicit type parameters for fold/map/combine)\n 4. maintenance seems to be on life support?\n\n\n\nGHCup metadata is essentially:\n\n\n type GHCupDownloads = Map Tool ToolVersionSpec\n type ToolVersionSpec = Map GHCTargetVersion VersionInfo\n -- VersionInfo has a record for ArchitectureSpec\n type ArchitectureSpec = Map Architecture PlatformSpec\n type PlatformSpec = Map Platform PlatformVersionSpec\n type PlatformVersionSpec = Map (Maybe VersionRange) DownloadInfo\n\n\nBut 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.\n\n* * *\n\nSo I wonder: **are there any alternatives?**\n\nI 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.",
"title": "Config languages (and Dhall)"
}