15 Sep 2025 |
sterni (he/him) | bglgwyng: the testu01 test suite is only buildable on linux, Cabal discards this dependency on non-linux, you can force the platform to use with e.g. --system x86_64-linux | 15:38:40 |
sterni (he/him) | keypusher: https://nixos.org/manual/nixpkgs/stable/#haskell-trivial-helpers | 15:39:11 |
bglgwyng | it's x86_64-linux | 15:52:22 |
bglgwyng | I haven't trie don the other platforms | 15:53:24 |
sterni (he/him) | cabal2nix --system x86_64-linux https://hackage.haskell.org/package/splitmix-0.1.3.1.tar.gz gives me
{ mkDerivation, async, base, base-compat-batteries, bytestring
, containers, criterion, deepseq, fetchzip, HUnit, lib
, math-functions, process, random, template-haskell, test-framework
, test-framework-hunit, testu01, tf-random, vector
}:
mkDerivation {
pname = "splitmix";
version = "0.1.3.1";
src = fetchzip {
url = "https://hackage.haskell.org/package/splitmix-0.1.3.1.tar.gz";
sha256 = "0mll5axdvh5wan6prh3v6l2n15xsj31ghi0g887ljpk515id5a2w";
};
libraryHaskellDepends = [ base deepseq ];
testHaskellDepends = [
async base base-compat-batteries bytestring containers deepseq
HUnit math-functions process random template-haskell test-framework
test-framework-hunit tf-random vector
];
testSystemDepends = [ testu01 ];
benchmarkHaskellDepends = [
base containers criterion random tf-random
];
description = "Fast Splittable PRNG";
license = lib.licenses.bsd3;
}
So this looks fine.
| 15:54:59 |
sterni (he/him) | ahh now I understand the issue. | 15:56:50 |
sterni (he/him) | The problem with override is that it depends on initially computing the derivation successfully. This doesn't work if an argument is missing which is the case here with testu01 . That's why callCabal2nix has a third argument to pass in arguments (which can also act as an override at the definition site). So you want to do:
(pkgs.haskellPackages.callCabal2nix "splitmix" (builtins.fetchTarball "https://hackage.haskell.org/package/splitmix-0.1.3.1.tar.gz") { testu01 = null /* just pass something */; }).override { testu01 = /* later we can pass something else: */ my-pkg; }
| 15:59:14 |
bglgwyng | Ah I see | 16:06:43 |
bglgwyng | Thanks! | 16:06:46 |
bglgwyng | One thing annoying is that I can investigate the argments with builtins.functionArgs (pkgs.callCabal2nix name src) | 16:13:54 |
bglgwyng | Maybe it's because wrapped? I think I can find how to fix it | 16:14:12 |
keypusher | So going the addBuildTools route will require me to build wo using callCabal2Nix then? | 16:19:31 |
maralorn | I am missing a bit of context, but I don’t think so. Both functions are compatible. First call callCabal2Nix then apply addBuildTools to the result of the function. | 16:33:23 |
keypusher | Oh ok. I'll try that | 16:34:22 |
keypusher | You made my day. 4 hours of struggling just came to an end. My nix intuition is lacking. | 16:36:43 |
keypusher | Thanks 🎉 | 16:37:15 |
sterni (he/him) | I noticed that, too, yesterday, I think this is a bug and is probably fixable | 17:43:17 |
Alex | In reply to @sternenseemann:systemli.org I would just start with adding a MicroHs package set built with GHC as we don't have hugs and then just iterate on that; maybe add hugs separately, have a hugs package set (if that even makes sense). Not sure which branch to PR to.
I assume haskell-updates is the best choice?
(Hugs fix without GCC 13 is ready.) | 22:37:00 |
sterni (he/him) | can also be master if you don’t depend on anything in h-u | 22:47:03 |
Alex | Even for the mhs package set? | 22:48:00 |
Alex | In reply to @sternenseemann:systemli.org can also be master if you don’t depend on anything in h-u Hugs fix: https://github.com/NixOS/nixpkgs/pull/443281 | 22:53:44 |
sterni (he/him) | the mhs package set is probably better on h-u since we’d want to figure out CI | 22:58:06 |
sterni (he/him) | I’ll just see to it that hugs gets propagated quickly to the branch after megre | 22:58:29 |
Alex | Ok, thanks. | 22:58:50 |
16 Sep 2025 |
bglgwyng | Do you mean a bug in builtins.functionArgs ? | 00:08:45 |
bglgwyng | https://github.com/bglgwyng/nix-x-cabal
I wrote another Nix + Haskell framework. It is based on flake-parts and uses plan.json to reproducible builds. It delegates all the network access from Cabal to Nix, and runs cabal build in pure way. | 04:59:21 |
bglgwyng | It doesn't use pre-baked package set, but resolves version constraints. So you can freely choose any version of ghc(at this moment, in nixpgks.haskell.packages.ghc*** ) | 05:00:45 |
bglgwyng | I wish I could provide the docs right now, but nix-options-doc and flake-parts don't play well together for some reasons.. | 05:10:06 |
Alex | In reply to @bglgwyng:matrix.org https://github.com/bglgwyng/nix-x-cabal
I wrote another Nix + Haskell framework. It is based on flake-parts and uses plan.json to reproducible builds. It delegates all the network access from Cabal to Nix, and runs cabal build in pure way. Do you have a typo here?
https://github.com/bglgwyng/nix-x-cabal/blob/4c7136218ba15da9304a054fbaeb8641db5592c3/lib/make-noindex-repository.nix#L4
(Was looking through wondering whether you're using IFD.) | 07:17:46 |
bglgwyng | Thanks! | 07:19:13 |