diff --git a/.direnv/bin/nix-direnv-reload b/.direnv/bin/nix-direnv-reload new file mode 100755 index 0000000..0e4d1c1 --- /dev/null +++ b/.direnv/bin/nix-direnv-reload @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -e +if [[ ! -d "/home/leonv/Git/Sudoku" ]]; then + echo "Cannot find source directory; Did you move it?" + echo "(Looking for "/home/leonv/Git/Sudoku")" + echo 'Cannot force reload with this script - use "direnv reload" manually and then try again' + exit 1 +fi + +# rebuild the cache forcefully +_nix_direnv_force_reload=1 direnv exec "/home/leonv/Git/Sudoku" true + +# Update the mtime for .envrc. +# This will cause direnv to reload again - but without re-building. +touch "/home/leonv/Git/Sudoku/.envrc" + +# Also update the timestamp of whatever profile_rc we have. +# This makes sure that we know we are up to date. +touch -r "/home/leonv/Git/Sudoku/.envrc" "/home/leonv/Git/Sudoku/.direnv"/*.rc diff --git a/.direnv/flake-inputs/2hc9lg18zd6yabw9jqj0wy3s9kyvkzp0-source b/.direnv/flake-inputs/2hc9lg18zd6yabw9jqj0wy3s9kyvkzp0-source new file mode 120000 index 0000000..81f28c9 --- /dev/null +++ b/.direnv/flake-inputs/2hc9lg18zd6yabw9jqj0wy3s9kyvkzp0-source @@ -0,0 +1 @@ +/nix/store/2hc9lg18zd6yabw9jqj0wy3s9kyvkzp0-source \ No newline at end of file diff --git a/.direnv/flake-inputs/79qk1r0q5xc9g3qhw0m143x04q6d7x2m-source b/.direnv/flake-inputs/79qk1r0q5xc9g3qhw0m143x04q6d7x2m-source new file mode 120000 index 0000000..68b60f3 --- /dev/null +++ b/.direnv/flake-inputs/79qk1r0q5xc9g3qhw0m143x04q6d7x2m-source @@ -0,0 +1 @@ +/nix/store/79qk1r0q5xc9g3qhw0m143x04q6d7x2m-source \ No newline at end of file diff --git a/.direnv/flake-inputs/bv68i4l7g6s5sixxm0c9lcjdxhlkg0n5-source b/.direnv/flake-inputs/bv68i4l7g6s5sixxm0c9lcjdxhlkg0n5-source new file mode 120000 index 0000000..a3f9c98 --- /dev/null +++ b/.direnv/flake-inputs/bv68i4l7g6s5sixxm0c9lcjdxhlkg0n5-source @@ -0,0 +1 @@ +/nix/store/bv68i4l7g6s5sixxm0c9lcjdxhlkg0n5-source \ No newline at end of file diff --git a/.direnv/flake-inputs/hmiyz975p0bfnzfcbamn6d0v1gfv15ds-source b/.direnv/flake-inputs/hmiyz975p0bfnzfcbamn6d0v1gfv15ds-source new file mode 120000 index 0000000..daaa1f1 --- /dev/null +++ b/.direnv/flake-inputs/hmiyz975p0bfnzfcbamn6d0v1gfv15ds-source @@ -0,0 +1 @@ +/nix/store/hmiyz975p0bfnzfcbamn6d0v1gfv15ds-source \ No newline at end of file diff --git a/.direnv/flake-inputs/lwyjz70qh12nq6cb7fixl85vryzxqm3c-source b/.direnv/flake-inputs/lwyjz70qh12nq6cb7fixl85vryzxqm3c-source new file mode 120000 index 0000000..9066cfe --- /dev/null +++ b/.direnv/flake-inputs/lwyjz70qh12nq6cb7fixl85vryzxqm3c-source @@ -0,0 +1 @@ +/nix/store/lwyjz70qh12nq6cb7fixl85vryzxqm3c-source \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa new file mode 120000 index 0000000..25c9aca --- /dev/null +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa @@ -0,0 +1 @@ +/nix/store/dl8p5s0m5prz82vbshy9n1k12yj1imsg-ghc-shell-for-Sudoku-0.1.0.0-0-env \ No newline at end of file diff --git a/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc new file mode 100644 index 0000000..72f3b9a --- /dev/null +++ b/.direnv/flake-profile-a5d5b61aa8a61b7d9d765e1daf971a9a578f1cfa.rc @@ -0,0 +1,1883 @@ +unset shellHook +PATH=${PATH:-} +nix_saved_PATH="$PATH" +XDG_DATA_DIRS=${XDG_DATA_DIRS:-} +nix_saved_XDG_DATA_DIRS="$XDG_DATA_DIRS" +AR='ar' +export AR +AS='as' +export AS +BASH='/nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26/bin/bash' +CC='gcc' +export CC +CONFIG_SHELL='/nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26/bin/bash' +export CONFIG_SHELL +CXX='g++' +export CXX +HOSTTYPE='x86_64' +HOST_PATH='/nix/store/w6aci43k9bdvrkz9nwfx2dqw67h0llmq-ncurses-6.4/bin:/nix/store/mb488rr560vq1xnl10hinnyfflcrd51n-coreutils-9.4/bin:/nix/store/rr5pqqck5f6fjkv7agwjyhaljvh27ncn-findutils-4.9.0/bin:/nix/store/n6i46dn14q3iq82gqgb5qkl74aqhwr77-diffutils-3.10/bin:/nix/store/q7kq0naays5251ihghw0ccsz39id7kk5-gnused-4.9/bin:/nix/store/320v66ili0mwnyrxj3dwbxm0z8ndkbw7-gnugrep-3.11/bin:/nix/store/sgpv5hm93gzkcm4s536nmkpag3q5d22s-gawk-5.2.2/bin:/nix/store/zq7c5lha3pzixhs8vgy0c0k2sn9s6kq9-gnutar-1.35/bin:/nix/store/p27jyrx9ghhxbl5j82114fdy50lr33z3-gzip-1.13/bin:/nix/store/f7i053lqqbppa3nx3nbmk6y46wy06shj-bzip2-1.0.8-bin/bin:/nix/store/3wwka0sn2h96cmqxyclj2vba26a5sk1s-gnumake-4.4.1/bin:/nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26/bin:/nix/store/yb3vxdqkdx672wl4hg92xf1zhykjjppr-patch-2.7.6/bin:/nix/store/p6iz6wa3lqwzf5nbihpv52zpp1ji9243-xz-5.6.0-bin/bin:/nix/store/pqraddz55s3qlsjxs71zwjchj0c4csfw-file-5.45/bin' +export HOST_PATH +IFS=' +' +IN_NIX_SHELL='impure' +export IN_NIX_SHELL +LANG='en_US.UTF-8' +export LANG +LD='ld' +export LD +LINENO='76' +LOCALE_ARCHIVE='/nix/store/j1ba2w87aq4bcvv47mvrnss2ashfrzbk-glibc-locales-2.38-44/lib/locale/locale-archive' +export LOCALE_ARCHIVE +MACHTYPE='x86_64-pc-linux-gnu' +NIX_BINTOOLS='/nix/store/7hhd9smnjspppk4k6n47bkw64fdbgbrz-binutils-wrapper-2.41' +export NIX_BINTOOLS +NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' +export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu +NIX_BUILD_CORES='24' +export NIX_BUILD_CORES +NIX_CC='/nix/store/qhpw32pz39y6i30b3vrbw5fw6zv5549f-gcc-wrapper-13.2.0' +export NIX_CC +NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu='1' +export NIX_CC_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu +NIX_CFLAGS_COMPILE=' -frandom-seed=dl8p5s0m5p' +export NIX_CFLAGS_COMPILE +NIX_ENFORCE_NO_NATIVE='1' +export NIX_ENFORCE_NO_NATIVE +NIX_GHC='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages/bin/ghc' +export NIX_GHC +NIX_GHCPKG='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages/bin/ghc-pkg' +export NIX_GHCPKG +NIX_GHC_DOCDIR='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages/share/doc/ghc/html' +export NIX_GHC_DOCDIR +NIX_GHC_LIBDIR='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages/lib/ghc-9.6.4/lib' +export NIX_GHC_LIBDIR +NIX_HARDENING_ENABLE='bindnow format fortify fortify3 pic relro stackprotector strictoverflow' +export NIX_HARDENING_ENABLE +NIX_LDFLAGS='-rpath /home/leonv/Git/Sudoku/outputs/out/lib -L/nix/store/w6aci43k9bdvrkz9nwfx2dqw67h0llmq-ncurses-6.4/lib -L/nix/store/jx5kkzn0dhxa5y5k1fs9ymbvha15r911-libffi-3.4.6/lib -L/nix/store/3frbd0spychry5hg7jfajaiga271nwk1-elfutils-0.190/lib -L/nix/store/wx2ngazi4zyx1gi55kz3p9q8y6497fsk-gmp-with-cxx-6.3.0/lib -L/nix/store/w6aci43k9bdvrkz9nwfx2dqw67h0llmq-ncurses-6.4/lib -L/nix/store/jx5kkzn0dhxa5y5k1fs9ymbvha15r911-libffi-3.4.6/lib -L/nix/store/3frbd0spychry5hg7jfajaiga271nwk1-elfutils-0.190/lib -L/nix/store/wx2ngazi4zyx1gi55kz3p9q8y6497fsk-gmp-with-cxx-6.3.0/lib' +export NIX_LDFLAGS +NIX_NO_SELF_RPATH='1' +NIX_STORE='/nix/store' +export NIX_STORE +NM='nm' +export NM +OBJCOPY='objcopy' +export OBJCOPY +OBJDUMP='objdump' +export OBJDUMP +OLDPWD='' +export OLDPWD +OPTERR='1' +OSTYPE='linux-gnu' +PATH='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages/bin:/nix/store/h2lvdp72m409b1bx7z0mpky5ggbqc6fr-cabal-install-3.10.2.1/bin:/nix/store/pg7n63rqf543a32pvmzs786r2i3a165m-fourmolu-0.14.0.0/bin:/nix/store/0yf7l0mbsrxaq4f90pc6p3wyczyypdr9-haskell-language-server-2.6.0.0/bin:/nix/store/vlkq1rz62c6viiibmgv2hwz528x1vgar-aeson-pretty-0.8.10/bin:/nix/store/gjng6wrl7dsk8d98yjfiz9qb3g64h9f2-ghc-9.6.4/bin:/nix/store/xd6d454s04qim0mdjzmbdc2ij6lca9zy-ghcide-2.6.0.0/bin:/nix/store/gbw85k59bq0yaq5axv1d0imqwnv9wbia-constraints-extras-0.4.0.0/bin:/nix/store/sp79nlnwqx80ky99251qbrp23jf1rj22-hie-bios-0.13.1/bin:/nix/store/2xqav6hbzq2h4r9ijpd7ck6v3mzx0maq-hiedb-0.5.0.1/bin:/nix/store/yjvfnhg5h79shxklvv51mi4yci3zhjsk-lsp-types-2.1.1.0/bin:/nix/store/h072011f0700vanfhik1pykk17zv325j-implicit-hie-0.1.4.0/bin:/nix/store/si5c5sq4vap9nif6d3aw9mpzmfaryqxq-pretty-simple-4.1.2.0/bin:/nix/store/g69h4dp9vw2xm2bfphajsnf35paipm4b-floskell-0.11.1/bin:/nix/store/ympigb3qm1fin5r3rkhsl7lrjh5p7d18-retrie-1.2.3/bin:/nix/store/z51af1x72fdmdwkwli3bi51fa27xypyv-apply-refact-0.13.0.0/bin:/nix/store/328asb4q211rsqxd2lnf6q3r2hxjmc08-hlint-3.6.1/bin:/nix/store/l5v9nkgh2ynvnjak1gi3k0lya1r8zp43-cpphs-1.20.9.1/bin:/nix/store/jm5f7c00nvql0zd7b7442xhzrwhc3npz-hscolour-1.25/bin:/nix/store/9kckmzlysl6sm4dhsvnvmsfabxylsafs-ormolu-0.7.2.0-bin/bin:/nix/store/2gv837mkak8gvd766vck67mfj6lnss5k-stan-0.1.2.1/bin:/nix/store/iw8fn0x4fbxl2rdla915nf990krnszvp-extensions-0.1.0.1/bin:/nix/store/i2h3ibj2p8v597ic36x4hsf6dhw91d3x-stylish-haskell-0.14.5.0/bin:/nix/store/3125ahv429pk8sxnfhj5l3f2ph7jllrk-patchelf-0.15.0/bin:/nix/store/qhpw32pz39y6i30b3vrbw5fw6zv5549f-gcc-wrapper-13.2.0/bin:/nix/store/7vc88ixc6yca2hwgszjk51dh23j3g2nr-gcc-13.2.0/bin:/nix/store/m9b4wcy4yyn5xcy394h74x7klb28nm2c-glibc-2.38-44-bin/bin:/nix/store/mb488rr560vq1xnl10hinnyfflcrd51n-coreutils-9.4/bin:/nix/store/7hhd9smnjspppk4k6n47bkw64fdbgbrz-binutils-wrapper-2.41/bin:/nix/store/bczmlm8brs93gp4lscwvc1dnn2ipymnc-binutils-2.41/bin:/nix/store/w6aci43k9bdvrkz9nwfx2dqw67h0llmq-ncurses-6.4/bin:/nix/store/mb488rr560vq1xnl10hinnyfflcrd51n-coreutils-9.4/bin:/nix/store/rr5pqqck5f6fjkv7agwjyhaljvh27ncn-findutils-4.9.0/bin:/nix/store/n6i46dn14q3iq82gqgb5qkl74aqhwr77-diffutils-3.10/bin:/nix/store/q7kq0naays5251ihghw0ccsz39id7kk5-gnused-4.9/bin:/nix/store/320v66ili0mwnyrxj3dwbxm0z8ndkbw7-gnugrep-3.11/bin:/nix/store/sgpv5hm93gzkcm4s536nmkpag3q5d22s-gawk-5.2.2/bin:/nix/store/zq7c5lha3pzixhs8vgy0c0k2sn9s6kq9-gnutar-1.35/bin:/nix/store/p27jyrx9ghhxbl5j82114fdy50lr33z3-gzip-1.13/bin:/nix/store/f7i053lqqbppa3nx3nbmk6y46wy06shj-bzip2-1.0.8-bin/bin:/nix/store/3wwka0sn2h96cmqxyclj2vba26a5sk1s-gnumake-4.4.1/bin:/nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26/bin:/nix/store/yb3vxdqkdx672wl4hg92xf1zhykjjppr-patch-2.7.6/bin:/nix/store/p6iz6wa3lqwzf5nbihpv52zpp1ji9243-xz-5.6.0-bin/bin:/nix/store/pqraddz55s3qlsjxs71zwjchj0c4csfw-file-5.45/bin' +export PATH +PS4='+ ' +RANLIB='ranlib' +export RANLIB +READELF='readelf' +export READELF +SIZE='size' +export SIZE +SOURCE_DATE_EPOCH='315532800' +export SOURCE_DATE_EPOCH +STRINGS='strings' +export STRINGS +STRIP='strip' +export STRIP +XDG_DATA_DIRS='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages/share:/nix/store/h2lvdp72m409b1bx7z0mpky5ggbqc6fr-cabal-install-3.10.2.1/share:/nix/store/q73kyn5r8h4vwn8p77zczv0n1184h9hm-attoparsec-0.14.4/share:/nix/store/nn677j99jk0r0lflyb44a23ij7pdr8xx-attoparsec-aeson-2.1.0.0/share:/nix/store/gjng6wrl7dsk8d98yjfiz9qb3g64h9f2-ghc-9.6.4/share:/nix/store/yjvfnhg5h79shxklvv51mi4yci3zhjsk-lsp-types-2.1.1.0/share:/nix/store/dzclfyllkxrbcmymgs1cincykk1h10z8-fail-4.9.0.0/share:/nix/store/328asb4q211rsqxd2lnf6q3r2hxjmc08-hlint-3.6.1/share:/nix/store/9kckmzlysl6sm4dhsvnvmsfabxylsafs-ormolu-0.7.2.0-bin/share:/nix/store/2gv837mkak8gvd766vck67mfj6lnss5k-stan-0.1.2.1/share:/nix/store/3125ahv429pk8sxnfhj5l3f2ph7jllrk-patchelf-0.15.0/share' +export XDG_DATA_DIRS +__structuredAttrs='' +export __structuredAttrs +_substituteStream_has_warned_replace_deprecation='false' +buildInputs='' +export buildInputs +builder='/nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26/bin/bash' +export builder +cmakeFlags='' +export cmakeFlags +configureFlags='' +export configureFlags +defaultBuildInputs='' +defaultNativeBuildInputs='/nix/store/3125ahv429pk8sxnfhj5l3f2ph7jllrk-patchelf-0.15.0 /nix/store/zfgzsn57hhv547x3qmxgpf9y8a320mjr-update-autotools-gnu-config-scripts-hook /nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh /nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh /nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh /nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh /nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh /nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh /nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh /nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh /nix/store/ilaf1w22bxi6jsi45alhmvvdgy4ly3zs-patch-shebangs.sh /nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh /nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh /nix/store/ngg1cv31c8c7bcm2n8ww4g06nq7s4zhm-set-source-date-epoch-to-latest.sh /nix/store/wmknncrif06fqxa16hpdldhixk95nds0-strip.sh /nix/store/qhpw32pz39y6i30b3vrbw5fw6zv5549f-gcc-wrapper-13.2.0' +depsBuildBuild='' +export depsBuildBuild +depsBuildBuildPropagated='' +export depsBuildBuildPropagated +depsBuildTarget='' +export depsBuildTarget +depsBuildTargetPropagated='' +export depsBuildTargetPropagated +depsHostHost='' +export depsHostHost +depsHostHostPropagated='' +export depsHostHostPropagated +depsTargetTarget='' +export depsTargetTarget +depsTargetTargetPropagated='' +export depsTargetTargetPropagated +doCheck='' +export doCheck +doInstallCheck='' +export doInstallCheck +dontAddDisableDepTrack='1' +export dontAddDisableDepTrack +declare -a envBuildBuildHooks=() +declare -a envBuildHostHooks=() +declare -a envBuildTargetHooks=() +declare -a envHostHostHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) +declare -a envHostTargetHooks=('ccWrapper_addCVars' 'bintoolsWrapper_addLDVars' ) +declare -a envTargetTargetHooks=() +declare -a fixupOutputHooks=('if [ -z "${dontPatchELF-}" ]; then patchELF "$prefix"; fi' 'if [[ -z "${noAuditTmpdir-}" && -e "$prefix" ]]; then auditTmpdir "$prefix"; fi' 'if [ -z "${dontGzipMan-}" ]; then compressManPages "$prefix"; fi' '_moveLib64' '_moveSbin' '_moveSystemdUserUnits' 'patchShebangsAuto' '_pruneLibtoolFiles' '_doStrip' ) +guess='24' +initialPath='/nix/store/mb488rr560vq1xnl10hinnyfflcrd51n-coreutils-9.4 /nix/store/rr5pqqck5f6fjkv7agwjyhaljvh27ncn-findutils-4.9.0 /nix/store/n6i46dn14q3iq82gqgb5qkl74aqhwr77-diffutils-3.10 /nix/store/q7kq0naays5251ihghw0ccsz39id7kk5-gnused-4.9 /nix/store/320v66ili0mwnyrxj3dwbxm0z8ndkbw7-gnugrep-3.11 /nix/store/sgpv5hm93gzkcm4s536nmkpag3q5d22s-gawk-5.2.2 /nix/store/zq7c5lha3pzixhs8vgy0c0k2sn9s6kq9-gnutar-1.35 /nix/store/p27jyrx9ghhxbl5j82114fdy50lr33z3-gzip-1.13 /nix/store/f7i053lqqbppa3nx3nbmk6y46wy06shj-bzip2-1.0.8-bin /nix/store/3wwka0sn2h96cmqxyclj2vba26a5sk1s-gnumake-4.4.1 /nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26 /nix/store/yb3vxdqkdx672wl4hg92xf1zhykjjppr-patch-2.7.6 /nix/store/p6iz6wa3lqwzf5nbihpv52zpp1ji9243-xz-5.6.0-bin /nix/store/pqraddz55s3qlsjxs71zwjchj0c4csfw-file-5.45' +installPhase='echo $nativeBuildInputs $buildInputs > $out' +export installPhase +mesonFlags='' +export mesonFlags +name='ghc-shell-for-Sudoku-0.1.0.0-0-env' +export name +nativeBuildInputs='/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages /nix/store/h2lvdp72m409b1bx7z0mpky5ggbqc6fr-cabal-install-3.10.2.1 /nix/store/pg7n63rqf543a32pvmzs786r2i3a165m-fourmolu-0.14.0.0 /nix/store/0yf7l0mbsrxaq4f90pc6p3wyczyypdr9-haskell-language-server-2.6.0.0 /nix/store/328asb4q211rsqxd2lnf6q3r2hxjmc08-hlint-3.6.1' +export nativeBuildInputs +out='/home/leonv/Git/Sudoku/outputs/out' +export out +outputBin='out' +outputDev='out' +outputDevdoc='REMOVE' +outputDevman='out' +outputDoc='out' +outputInclude='out' +outputInfo='out' +outputLib='out' +outputMan='out' +outputs='out' +export outputs +patches='' +export patches +phases='installPhase' +export phases +pkg='/nix/store/qhpw32pz39y6i30b3vrbw5fw6zv5549f-gcc-wrapper-13.2.0' +declare -a pkgsBuildBuild=() +declare -a pkgsBuildHost=('/nix/store/rdf7lwl385fnrpbj0ai5wxa03k287cmv-ghc-9.6.4-with-packages' '/nix/store/p3ls7khlnssf9ixxk5r020fdz0lg5r9g-primitive-0.8.0.0' '/nix/store/rv7yk6wjzwn4daqlr0zdj5yl8yszdknw-vector-stream-0.1.0.1' '/nix/store/h2lvdp72m409b1bx7z0mpky5ggbqc6fr-cabal-install-3.10.2.1' '/nix/store/2zpksr0sqa6s6y6mhd3znng9k4i5ppd6-async-2.2.5' '/nix/store/pj37wz9hj8zx57s0c69d1zys0fw3inrj-hashable-1.4.3.0' '/nix/store/sqagr790qyyy4jsv2m891yfh6d9lblfq-base16-bytestring-1.0.2.0' '/nix/store/83vlll0si6s916r6a8svxdidlikj5mgp-base64-bytestring-1.2.1.0' '/nix/store/89xlsvzpp6kf9qgxylad612rzb6hcl32-cabal-install-solver-3.10.2.1' '/nix/store/pnf50av730d4cckh4hlkb94r547gq6bl-edit-distance-0.2.2.1' '/nix/store/9w448nyhladkwnlsfil0daiknnqwb3ni-random-1.2.1.1' '/nix/store/s2h14csjsz7l1zdv5xgflgn09j40vn3l-splitmix-0.1.0.5' '/nix/store/c70izcx9cvw5xpq8bgfsjk0lhi9akjxy-cryptohash-sha256-0.11.102.1' '/nix/store/k4lmaaq4mx4zf5gdagq8vxsnlq8glsgr-echo-0.1.4' '/nix/store/pa0a8hgwdccrjlrglpiacp05xa7kmmk6-hackage-security-0.6.2.4' '/nix/store/z4x32ms0nniz8wjnqzkqakfsih2zd1xy-ed25519-0.0.5.0' '/nix/store/czqbj3aa6xfdv1j89hzjfj3s3sm4nfx4-lukko-0.1.1.3' '/nix/store/z9qwdz55cq6dy4b9amzdg1kzf5szid89-network-3.1.4.0' '/nix/store/m8cx2lr0kr21rjicvjmmjyx3g0385z8q-network-uri-2.6.4.2' '/nix/store/5hzcfsf3szg3pbr4w86fgli6nff0040i-th-compat-0.1.4' '/nix/store/whm3afwcc5j99f7911b7a22bcx20y23g-tar-0.5.1.1' '/nix/store/lb055amjd1jgrvmmci3dmv1ia018idyi-zlib-0.6.3.0' '/nix/store/khdnp6xjlgbxgxapi64g0571wmbj91b6-HTTP-4000.4.1' '/nix/store/fdn54l6fs0hixdg09kgw4dakax34chp7-regex-base-0.94.0.2' '/nix/store/mfxfmfbhk0b9qdxrhgmpg3jbngja7p3f-regex-posix-0.96.0.1' '/nix/store/18rckk37v1033g8qw2srx9kzyh4wkvsb-resolv-0.1.2.0' '/nix/store/vvfhd14brh2ks8mbnws2shj1g5d3gr82-safe-exceptions-0.1.7.4' '/nix/store/pg7n63rqf543a32pvmzs786r2i3a165m-fourmolu-0.14.0.0' '/nix/store/0w460938xrvlsfgzfdw9l7jmmss4hdba-aeson-2.1.2.1' '/nix/store/q73kyn5r8h4vwn8p77zczv0n1184h9hm-attoparsec-0.14.4' '/nix/store/8ibw3r2fddrrwqg64mxa38178d3kvfix-scientific-0.3.7.0' '/nix/store/54138ljkkyimxa82hqnv566bynzr659c-integer-logarithms-1.0.3.1' '/nix/store/hy47fdds8k4lb13fg5xrpghiarxh1xv4-base-compat-batteries-0.13.1' '/nix/store/ri4p377dc8v25cigf4z61mg6v191rbfz-base-compat-0.13.1' '/nix/store/sjnvpklf3g0n2fak968dslmgy5ag9an2-data-fix-0.3.2' '/nix/store/h9f9fsydakmi4hs9ncqrsfq6js7dfrwk-dlist-1.0' '/nix/store/gxs6p9dcb4731dgsr09ac5cjk7zj14a4-generically-0.1.1' '/nix/store/hhxbiv0hbp4jvz13klv0bn8hfhjgyrdx-indexed-traversable-0.1.3' '/nix/store/l4lqgzgx54nnj9ylj580s0z0cbcxdxbd-OneTuple-0.4.1.1' '/nix/store/692d804rjh705hnyj9rkci304qbjxi5j-QuickCheck-2.14.3' '/nix/store/4vka0kp0fq4fj3vzv6hxnqa56fmklkhk-semialign-1.3' '/nix/store/l254da3flfqnhypicb5p5ms669nm9i8w-indexed-traversable-instances-0.1.1.2' '/nix/store/0ids5p20b7rwfsp44bv70wjgd3jf62w9-tagged-0.8.8' '/nix/store/cpzl8fnac8cg2jqrwb652zkxl27891wz-unordered-containers-0.2.20' '/nix/store/vrl3y3252njhnx5j5yp74m9m7jyfp8dh-vector-0.13.1.0' '/nix/store/6drk1qsfflqlj413jjs7l9sdnxa5yrdn-semigroupoids-6.0.0.1' '/nix/store/ddk0f30869i47kgvl0fwfv8xp8hwzgdk-base-orphans-0.9.1' '/nix/store/pbkp6hzblkfgvy6mbyb6zmsn5yyhlkky-bifunctors-5.6.1' '/nix/store/kkilymsdq64jcgi4p4liv79qn25iizkl-assoc-1.1' '/nix/store/mcd38xsgshv6748i8sl2scjg8s7xyris-comonad-5.0.8' '/nix/store/almbz4glljfj59da2w5jiy3rcryxi6xl-distributive-0.6.2.1' '/nix/store/bq3ipszy7cp7a57ishfwkf890r7xgkcj-transformers-compat-0.7.2' '/nix/store/cv5wm33azqjfs7hk5xzng336d3yxgbkw-th-abstraction-0.5.0.0' '/nix/store/xs0d5x31wk8wfsrf27myj6y0kixj19gq-contravariant-1.5.5' '/nix/store/1yir44f6ds7b28hdfaqsvmz68pz484yg-StateVar-1.2.2' '/nix/store/fadpyq0p6d1hmf4vw60qdnkja4biqlpw-these-1.2' '/nix/store/n5q2mcw2zbsxd9jbk5hhcm1varqkqc8b-strict-0.5' '/nix/store/4nw0qn6yaqjal8qrdrz839z8xk1k50hi-text-short-0.1.5' '/nix/store/kpwb9m765svdqbi2ddmn97laj0jx4kvb-time-compat-1.9.6.1' '/nix/store/d8ikcjzcj8cphvpbarcqpf8w2ip80sdk-uuid-types-1.0.5.1' '/nix/store/gi3x1qg573xl6qal2fwhajab7mqa2dg5-witherable-0.4.2' '/nix/store/0yh9rvqa7mgsziwlsvhqrd1lfa932f84-ansi-terminal-1.0.2' '/nix/store/4hiv9hfbprj9k3qbrv3pvndygp8wji32-ansi-terminal-types-0.11.5' '/nix/store/10f2k5ziv3x1zl72smpxli7bxxmz1x77-colour-2.3.6' '/nix/store/10f2k5ziv3x1zl72smpxli7bxxmz1x77-colour-2.3.6' '/nix/store/cdd5qb5iv25ayzr74armpg1k7902j7b7-Diff-0.4.1' '/nix/store/qznqy4012777iqbh7wsmcyc1v3rf9x0i-file-embed-0.0.16.0' '/nix/store/cicvyw7969p5bpl89kj7vy7vc1kp5bv4-ghc-lib-parser-9.6.4.20240109' '/nix/store/3f8mhifg02814w6nkwhkvn5gygmris0a-megaparsec-9.5.0' '/nix/store/5bdkd2rv3ajnp6n3x2iw9c8i5zvw9rnh-case-insensitive-1.2.1.0' '/nix/store/4p2m614chg0zpydckk385y2mnbvnqql6-parser-combinators-1.3.0' '/nix/store/7sgawik6m159mbzj70sqhjdw7xn79pb6-MemoTrie-0.6.11' '/nix/store/jxbclcwp3xb65fg0x0h8sxn0swc11dky-newtype-generics-0.6.2' '/nix/store/cxwivqkn5wglsl0k92wnv9290k4knh0d-syb-0.7.2.4' '/nix/store/9qapm2pn51y638ccmga074x0vvjs1gyg-yaml-0.11.11.2' '/nix/store/jdj37ycnb94wzg1c6iz3qd7mnh7fzxr9-conduit-1.3.5' '/nix/store/sv4zslfnp2miy9jg0qx5ls6aqfvdg79s-mono-traversable-1.0.15.3' '/nix/store/zq6fn9p8xa3bqprxif253smhrbqd34n4-split-0.2.5' '/nix/store/8jwzja679d2wfgaqlmjxklhl7mk8mh28-vector-algorithms-0.9.0.1' '/nix/store/xmi7n8xhcmg2sfz9pqm2jg1mp2fh0r74-bitvec-1.1.5.0' '/nix/store/gm7s2pjbiljq5ki2fl9wk72c9r76h7wy-resourcet-1.3.0' '/nix/store/iqb6llxb5kg2y7d94ihyi733ajfbnbr2-unliftio-core-0.2.1.0' '/nix/store/iqb6llxb5kg2y7d94ihyi733ajfbnbr2-unliftio-core-0.2.1.0' '/nix/store/cs7wyrpdbvqh0grj27j10g12x7bdvr2s-libyaml-0.1.2' '/nix/store/nks0b8i98hd2zxdj8z4hm72fwr2fl9bw-optparse-applicative-0.18.1.0' '/nix/store/xmj5q8h7lfif3k34vilkzkp7n9la9rs1-prettyprinter-1.7.1' '/nix/store/27p4kxhr3cmpldb4v24i4zw2q9v2d9xz-prettyprinter-ansi-terminal-1.1.3' '/nix/store/wj42xiq2pijr0jvxqgpx9ar3ki00lvyx-th-env-0.1.1' '/nix/store/0yf7l0mbsrxaq4f90pc6p3wyczyypdr9-haskell-language-server-2.6.0.0' '/nix/store/vlkq1rz62c6viiibmgv2hwz528x1vgar-aeson-pretty-0.8.10' '/nix/store/nn677j99jk0r0lflyb44a23ij7pdr8xx-attoparsec-aeson-2.1.0.0' '/nix/store/9b3hvfgyd9hazpmvmf7lg13000f80n53-cmdargs-0.10.22' '/nix/store/5ckzyadnmfannr13c1bg5wakzc091h5s-cryptohash-sha1-0.11.101.0' '/nix/store/w1bmk8rb9psl5r7klp8230z4m6fh77rv-data-default-0.7.1.1' '/nix/store/x9vx9mapj6rpyixy4cs97z6y922rbg3n-data-default-class-0.1.2.0' '/nix/store/x94c65zmw0jnrpxj99hw40shbx3q4p08-data-default-instances-containers-0.0.1' '/nix/store/i29zbjzwkmcsairzhjr8axj0jvxc122x-data-default-instances-dlist-0.0.1' '/nix/store/7mq4czjr4hxnwnfa4lbcgg0az66724xm-data-default-instances-old-locale-0.0.1' '/nix/store/q4w9x3qsnaywny8r9j6xjv8vjis1fc34-old-locale-1.0.0.7' '/nix/store/zs4j5b5m0ci24kznx9yyc8b3rcmr5bx3-extra-1.7.14' '/nix/store/9k7ngwxa55ff899fvlc0mvclp92pm271-clock-0.8.4' '/nix/store/gjng6wrl7dsk8d98yjfiz9qb3g64h9f2-ghc-9.6.4' '/nix/store/xd6d454s04qim0mdjzmbdc2ij6lca9zy-ghcide-2.6.0.0' '/nix/store/3qly4a0vlmynj39zvajaprxikmmz7hpx-co-log-core-0.3.2.1' '/nix/store/wp1vkn5iv5samgdbyqwhqphv7a97i1z5-dependent-map-0.4.0.0' '/nix/store/gbw85k59bq0yaq5axv1d0imqwnv9wbia-constraints-extras-0.4.0.0' '/nix/store/7vqbfnrs6bnf8ggk4hsr93ghmx50kzxw-constraints-0.14' '/nix/store/v7ah9drnq2kpy42jslhnal45mv84545q-boring-0.2.1' '/nix/store/dblx254mmzisa0wldgn3cfj7lsim7yan-type-equality-1' '/nix/store/xsk80rdzlq1lc8l3j9r08w9897m6ak8i-dependent-sum-0.7.2.0' '/nix/store/a8kwhszz9x4xcjk6r8pmsgwf6rxqjjs2-some-1.0.6' '/nix/store/978mr79qggzqqpibm8jv9w048i0vngpy-enummapset-0.7.2.0' '/nix/store/sgsjbasyrl3lv2gda1mdb6x1ghqpqx7m-fingertree-0.1.5.0' '/nix/store/pn4s28x91ib2jsni4lcnmgwsacal32a0-focus-1.0.3.2' '/nix/store/6q73mqjb096jbzz0vn98l5xvh2d7pd15-ghc-check-0.5.0.8' '/nix/store/6wdn1gp1yx5m9rq01lrs5kcwin7sl4g8-ghc-paths-0.1.0.12' '/nix/store/6wdn1gp1yx5m9rq01lrs5kcwin7sl4g8-ghc-paths-0.1.0.12' '/nix/store/irb5kr6yjav18a4k51zqv7px2zqqd8ry-ghc-trace-events-0.1.2.8' '/nix/store/gp3aklia0p8bk00bjbgv73g534bdy8yv-Glob-0.10.2' '/nix/store/0s9vsb13ma2sidvk50s2jwir5m0g96mn-haddock-library-1.11.0' '/nix/store/sp79nlnwqx80ky99251qbrp23jf1rj22-hie-bios-0.13.1' '/nix/store/216703gf9s8f3flx70rk7p3am1hr3290-conduit-extra-1.3.6' '/nix/store/fx15wbgp8vfc8lsk3pahhmpc5i311sjp-streaming-commons-0.2.2.6' '/nix/store/l5l7p5pg085hcjikr61gyj1ji0ddfjpb-typed-process-0.2.11.1' '/nix/store/w9xnxsk110xi7r9c94cac2ns4dg1zdgl-temporary-1.3' '/nix/store/wx3vwqlnls38x27ph7w6f5lzxvyvkmxk-unix-compat-0.7.1' '/nix/store/jl64rnclfb064yv1084yl4zl0k6ykckl-hie-compat-0.3.1.2' '/nix/store/2xqav6hbzq2h4r9ijpd7ck6v3mzx0maq-hiedb-0.5.0.1' '/nix/store/pviwqwkz7yc0vmqv8fjhkk2fsnla4zcz-algebraic-graphs-0.7' '/nix/store/ww3xc0w45y7i48m59q9vcasvsl837xzy-lucid-2.11.20230408' '/nix/store/8rkl6l83n01bhffnqvg2zw4w0lxg0jjc-blaze-builder-0.4.2.3' '/nix/store/z5kdq3pl1zr158dq2d8dlih3sp4fr4nh-mmorph-1.2.0' '/nix/store/dqq7s8f4sf9yz8lag07119j98q9nxfai-sqlite-simple-0.4.19.0' '/nix/store/1gxdydmhz5y557iqjik860pvh08c6r33-blaze-textual-0.2.3.1' '/nix/store/84vplxfpw7ggzawghg1zq42f8xj2n2xx-direct-sqlite-2.3.29' '/nix/store/lqjp080hblyafkh08qjagl7lgfjq36vb-Only-0.1' '/nix/store/7a31smb1yz2a36hvnc8afhs6vlgagznf-terminal-size-0.3.4' '/nix/store/zvnkzqhbr6jy01053ap6mzbh6hy2mkcm-hls-graph-2.6.0.0' '/nix/store/icclfvwzkkzqcsans8lxhmbrn8ynj5zh-js-dgtable-0.5.2' '/nix/store/c0y40vhkgx9mgr8w39girpanl926apf2-js-flot-0.8.3' '/nix/store/7ajb102liv5hiim5kal0jqzqwddykhjh-js-jquery-3.3.1' '/nix/store/25p2xb011i7p86v6j7nranmzbys2djia-list-t-1.0.5.7' '/nix/store/34shvqysxdldjjdr2jypqss4bfsn90hv-foldl-1.4.15' '/nix/store/b6i3qzmadbaah41j8vxf70kz2frg4kdm-profunctors-5.6.2' '/nix/store/pc18fib6diw6pqiswy8f6lycaz3rl30p-logict-0.8.1.0' '/nix/store/147x3cb4hpnw252x19vv8biywyaw2iwz-monad-control-1.0.3.1' '/nix/store/1im873mjbb4hg84av2dvl5937z1swhv3-transformers-base-0.4.6' '/nix/store/1im873mjbb4hg84av2dvl5937z1swhv3-transformers-base-0.4.6' '/nix/store/7ynp74sldpbbqdkbjjgvwn2rs9brkln5-stm-containers-1.2.0.3' '/nix/store/x6br9yn18z8d6hv5w6dagsgs2v3wkbsa-deferred-folds-0.9.18.6' '/nix/store/cbak9dmmfpj8a888smziqj5nr8hyd2l1-stm-hamt-1.2.0.14' '/nix/store/n5qv2187ggcdwcv6amg0nk8h562hswgd-primitive-extras-0.10.1.10' '/nix/store/k27ha5mcbby7dvgi4kmip3qa2273r26l-cereal-0.5.8.3' '/nix/store/span3iz2gv6na2vnmn063rfqqcdc5lrh-primitive-unlifted-2.1.0.0' '/nix/store/6sn9jaw1fvndgxpx69vwcc5dpmahs7w4-unliftio-0.2.25.0' '/nix/store/mqmjg5hcgp9f3v14g39hfw1qsig834dx-hls-plugin-api-2.6.0.0' '/nix/store/0splyb9f2lhwdq7rhj4h97n3mb34g1pb-hw-fingertree-0.1.2.1' '/nix/store/y33421z65nvc0xq97zagzy0vkglyzw49-hw-prim-0.6.3.2' '/nix/store/ym8izk6qc7yzy1l71kfzj90acb2nvjr5-mmap-0.5.9' '/nix/store/6r6j6pipyya6dxk83zzkig79sb36jm10-lens-5.2.3' '/nix/store/rgb9663vwawpp97hzmb33j9vfkdz431v-call-stack-0.4.0' '/nix/store/vzhvli44rwd6l0gw2vfvy1l58xv8qnyx-free-5.2' '/nix/store/j9cs6fxnsra2dgk6j5xcw2l2a7ji29p7-kan-extensions-5.2.5' '/nix/store/b8brdx9x0dfwffc00ss9qdr45k3sycrr-adjunctions-4.4.2' '/nix/store/q1j8252w9mxz30pwiw9ch6pa00dhdjmb-semigroups-0.20' '/nix/store/814zj30w0dwgdc4bn27xp2r1m0pvm1cb-void-0.7.3' '/nix/store/gzcrxbg3q29zf1ma2cnx5a7cjaljdvj0-invariant-0.6.2' '/nix/store/c661pb7is3hiv1cva185avs07268qqly-parallel-3.2.2.0' '/nix/store/zxbd4qkvhk10wz6isw0ynj2ybvmsp029-reflection-2.1.7' '/nix/store/bxi92nm4xayjbr4gadiafinxdcg8kdsp-lens-aeson-1.2.3' '/nix/store/5n52k3vdsvw94rz1izf7rns1kkzm2z4s-lsp-2.3.0.0' '/nix/store/yjvfnhg5h79shxklvv51mi4yci3zhjsk-lsp-types-2.1.1.0' '/nix/store/757bnaz5vzbmayzidspm6yh5i1mmd6n3-generic-arbitrary-1.0.1' '/nix/store/25g5aqwlpkq1a4zv80p9573qh8f6l7kr-mod-0.2.0.1' '/nix/store/br9d8m32nk91mbc3r3hm4zyb4q04w9vx-semirings-0.6' '/nix/store/d4da3cr3kgdsd0awscdccwaqcr96s6n5-quickcheck-instances-0.3.30' '/nix/store/39r10iqxjq66rgg6g9smgi2ac0k56x2z-old-time-1.1.0.4' '/nix/store/b655vh04cwb6adkv2hl12q3awkfx3rpp-row-types-1.0.1.2' '/nix/store/ljf6calqk19km66krmjah4ak1658mfqx-generic-lens-2.2.2.0' '/nix/store/zdp5n2afi5wbrkyd2z3c2giq59x2a1k9-generic-lens-core-2.2.1.0' '/nix/store/g5ckacdcqii6xbfwks98x9p90rj3ahbc-indexed-profunctors-0.1.1.1' '/nix/store/0v3az6fcpvsxmp0q7qaci2dwfazqrxl9-safe-0.3.21' '/nix/store/z0wfs0ci79013lyi0c0rqgmkgz0x4wlq-regex-1.1.0.2' '/nix/store/ymq2qln67a4hk597f36diby57fb8ic0x-regex-pcre-builtin-0.95.2.3.8.44' '/nix/store/5ldg8310j3jg0vmnfjfgwfa25cnw1102-regex-tdfa-1.3.2.2' '/nix/store/mln9zj71jc2zp3d28jxnlq1nr4l1gj12-time-locale-compat-0.1.1.5' '/nix/store/lf4d0kwcllskdzc29lgnr5450gadyd19-utf8-string-1.0.2' '/nix/store/a3nxfwbwjpqffjnl21q057ysyq3j0727-sorted-list-0.2.2.0' '/nix/store/b37yqjrj6g7ihd9kq370z6hf7ly06fsh-text-rope-0.2' '/nix/store/7rlsj4yq4rhp877lnvkifkv8hwxgp904-uuid-1.3.15' '/nix/store/hj5i69y4s4ycbgzgykc3mnbkv172rn2z-cryptohash-md5-0.11.101.0' '/nix/store/bfqkabfb5kgcfxaywlvqsipgwxq2nv79-entropy-0.4.1.10' '/nix/store/7wa26353mv2abff0mpfhl33d0fncdwy2-network-info-0.2.1' '/nix/store/vzx8r0rjq2ysa8s021lmh9lq2c2ycry3-opentelemetry-0.8.0' '/nix/store/h072011f0700vanfhik1pykk17zv325j-implicit-hie-0.1.4.0' '/nix/store/y2gri4zvlrsnvdl92v6n8z3mbnbrsviq-filepattern-0.1.3' '/nix/store/y2gri4zvlrsnvdl92v6n8z3mbnbrsviq-filepattern-0.1.3' '/nix/store/1qpdhls0nzfpb05mh7hgxapxhnr2c217-gitrev-1.3.1' '/nix/store/n05icacd6pzviijqmb929s30ij5a9n7q-githash-0.1.7.0' '/nix/store/51lwp3b7sxgqwm6qrhdiswmhslz3q3vn-hls-alternate-number-format-plugin-2.6.0.0' '/nix/store/1r4mszdvgaiamcb10ygfbdksklp8rvj8-hls-cabal-fmt-plugin-2.6.0.0' '/nix/store/f4w4iny1k9520v7famzz7qzwjjkalqfj-process-extras-0.7.4' '/nix/store/2fh245qmi7wkpl3ajzmwa6s5riqqrmkd-generic-deriving-1.14.5' '/nix/store/b4qdvgz81pq1yk08ya9mhh31b9g40247-ListLike-4.7.8.2' '/nix/store/9pd3hddcdwhds5mzjpjpibhm19dnkgm7-fmlist-0.9.4' '/nix/store/r7bl0vz4pcnyijrblyvd9zq4wqicm4hh-hls-cabal-plugin-2.6.0.0' '/nix/store/0srfsy4629s6hsyvy5ymq7amhwljcipd-hls-call-hierarchy-plugin-2.6.0.0' '/nix/store/4gx0c90mblv12vszgyrn5kl3zhgh2m1a-hls-change-type-signature-plugin-2.6.0.0' '/nix/store/b8jyzmsnnhxzb4w0vpylmis8ndx803dh-hls-class-plugin-2.6.0.0' '/nix/store/101h50pvbrwb6b7hi49cz4yf40gxknbj-ghc-exactprint-1.7.1.0' '/nix/store/dzclfyllkxrbcmymgs1cincykk1h10z8-fail-4.9.0.0' '/nix/store/skrkzy6j159x1ph3805dlsd1fm1j0k0v-ordered-containers-0.2.3' '/nix/store/dc8sdv7gliqfaybyclz78538hvwliir5-hls-code-range-plugin-2.6.0.0' '/nix/store/6wp57v8jssqc3qc0gsg233065jymvy7m-hls-eval-plugin-2.6.0.0' '/nix/store/si5c5sq4vap9nif6d3aw9mpzmfaryqxq-pretty-simple-4.1.2.0' '/nix/store/c1bska6qbp0bwpha6qbfl5lzywgmh0n1-hls-explicit-fixity-plugin-2.6.0.0' '/nix/store/f7hp7v6zbf39n77nxr9slmib6l1b2kbq-hls-explicit-imports-plugin-2.6.0.0' '/nix/store/v8aam2wyb3ka1afsyq2y2cyjxgydimxn-hls-explicit-record-fields-plugin-2.6.0.0' '/nix/store/ipc6hrr6i143xbjjgw271p0ywywgki3v-hls-floskell-plugin-2.6.0.0' '/nix/store/g69h4dp9vw2xm2bfphajsnf35paipm4b-floskell-0.11.1' '/nix/store/65wk07md093wb3sm47a9yf9xzl0ap91l-haskell-src-exts-1.23.1' '/nix/store/y3zj94ysxazk80gkaq1ghygaxahd904n-monad-dijkstra-0.1.1.5' '/nix/store/04kd5ci40bapnhpb7a09jpm4bik9bbm8-psqueues-0.2.8.0' '/nix/store/637hlw5wbdilggslzclklq4yqfsgqkzf-ansi-wl-pprint-1.0.2' '/nix/store/wgb063y0m2rn49lxdr9i1jrqhhrp9gj0-prettyprinter-compat-ansi-wl-pprint-1.0.2' '/nix/store/f6zi8q70f3416w9l9yj3n2cqgg654i8l-hls-fourmolu-plugin-2.6.0.0' '/nix/store/pv4fln163plcf0bpgkmxcxn2gnfnw5gz-hls-gadt-plugin-2.6.0.0' '/nix/store/ymkp0cb7b8vyfgncplhqi8949pi52w7f-hls-refactor-plugin-2.6.0.0' '/nix/store/84yqigcqnrdlsk45md2sacq5jhwd3hq6-regex-applicative-0.3.4' '/nix/store/wmpxahk4pqdigflghbi46sk9fklrbyrs-filtrable-0.1.6.0' '/nix/store/ympigb3qm1fin5r3rkhsl7lrjh5p7d18-retrie-1.2.3' '/nix/store/n6jy1d0yxb8jdk35c0kvd14klnrx56b8-random-shuffle-0.0.4' '/nix/store/id9qmb4zcyfs1wdfcphlsm1yk2vg95zk-MonadRandom-0.6' '/nix/store/labphlgnw21xxa9j3mfygm2rcvg4nqz4-hls-hlint-plugin-2.6.0.0' '/nix/store/z51af1x72fdmdwkwli3bi51fa27xypyv-apply-refact-0.13.0.0' '/nix/store/7qipb0g14hzf7vxd50bpxr57ha4vbjd6-filemanip-0.3.6.3' '/nix/store/dv5g62i13sxjkpbfvn7r8dy79dp1cpi0-refact-0.3.0.2' '/nix/store/c0729ral37firmwvyvacw9in97s880yx-uniplate-1.6.13' '/nix/store/c0729ral37firmwvyvacw9in97s880yx-uniplate-1.6.13' '/nix/store/4m4crpd7wr5lqv90van0rkvwlz3im6dq-ghc-lib-parser-ex-9.6.0.2' '/nix/store/328asb4q211rsqxd2lnf6q3r2hxjmc08-hlint-3.6.1' '/nix/store/l5v9nkgh2ynvnjak1gi3k0lya1r8zp43-cpphs-1.20.9.1' '/nix/store/v47brmh2jd0v9x5wa10ixcsy1jq82z91-polyparse-1.13' '/nix/store/v47brmh2jd0v9x5wa10ixcsy1jq82z91-polyparse-1.13' '/nix/store/n798wgvgnvcczanr13ymh0rwliqxfr82-deriving-aeson-0.2.9' '/nix/store/jm5f7c00nvql0zd7b7442xhzrwhc3npz-hscolour-1.25' '/nix/store/sb1hgqnlbx1h5b4714vkykq6c01kc4l3-hls-module-name-plugin-2.6.0.0' '/nix/store/vqajilc3r36g2cbq68k563n2cxni3kbw-hls-ormolu-plugin-2.6.0.0' '/nix/store/ixbyqbqnfkrrb2d5svqd06520a5vs887-ormolu-0.7.2.0' '/nix/store/9kckmzlysl6sm4dhsvnvmsfabxylsafs-ormolu-0.7.2.0-bin' '/nix/store/p78qdbd6dm030v3yq9b8nd23mvmibqvy-hls-overloaded-record-dot-plugin-2.6.0.0' '/nix/store/hhc742iyqcal355bqc3j4winv9gqyi1k-hls-pragmas-plugin-2.6.0.0' '/nix/store/yi47cnnpx4vx8kn1c8fd90csz67mfi3r-fuzzy-0.1.1.0' '/nix/store/98pcw30lxd9vn7ia8a1f7jlkdxsp02dj-monoid-subclasses-1.2.4.1' '/nix/store/jny3mggdhyzy1fkdcrfpsaa0msv71v9g-commutative-semigroups-0.1.0.2' '/nix/store/n4d7r37v93lrhwsaxalx2sdnbv4128v5-primes-0.2.1.0' '/nix/store/4hb3iaaxyn8ammgbm2n5wyil0sk4hxsa-hls-qualify-imported-names-plugin-2.6.0.0' '/nix/store/2h5dxs96vrc4xwa4kfb9a94l3arwaafd-hls-rename-plugin-2.6.0.0' '/nix/store/m5fn2vd5i8vv3cc0b13321zg8l30dnin-hls-retrie-plugin-2.6.0.0' '/nix/store/bgzfgir07bb10mxkjz4cc9cnn0ifn1hq-hls-semantic-tokens-plugin-2.6.0.0' '/nix/store/jf99jf45q62n6p4fsqjj26lhpj964n7m-hls-splice-plugin-2.6.0.0' '/nix/store/p1p8pmjxccqvzab325laha4aizjgnc0y-hls-stan-plugin-2.6.0.0' '/nix/store/2gv837mkak8gvd766vck67mfj6lnss5k-stan-0.1.2.1' '/nix/store/fs5q3b924y7xxyvxr6iiqnyjzrwbxgk5-base64-0.4.2.4' '/nix/store/47car2j0sd6kv6hpd1pk1n0b858xjb62-blaze-html-0.9.1.2' '/nix/store/5d80nc6q2xqaaypb7nidybz8dixpzhj7-blaze-markup-0.8.3.0' '/nix/store/a5rlncj2xq7sbfzrfja8wjmdzj449613-clay-0.14.0' '/nix/store/w9bzavn3rrxk5dcdg3jsq567g1sq7ndh-colourista-0.1.0.2' '/nix/store/mv6r8sjrj8xj945xjpvncr55csgmpm1f-dir-traverse-0.2.3.0' '/nix/store/iw8fn0x4fbxl2rdla915nf990krnszvp-extensions-0.1.0.1' '/nix/store/9h0gg22nmfkv76nbdh1m6zq8dgbq520w-microaeson-0.1.0.1' '/nix/store/qfz58lsp6hb7xwdcc3fynshsi2kamp09-relude-1.2.1.0' '/nix/store/5mdfxxp1vdp39ixn3d5na3vcdiz5rdyl-slist-0.2.1.0' '/nix/store/l4a67y08dgm70gircgi5jkvmgkx2936b-tomland-1.3.3.2' '/nix/store/b2syf757lv0z82jfa04rx07pdcbjrgjv-validation-selective-0.2.0.0' '/nix/store/l9rxgnrfx6wyb2dwm4vxax3dgs3x4l3f-selective-0.7' '/nix/store/va38qrayxslgw4dihlnygzmcl73hchqy-trial-0.0.0.0' '/nix/store/7nwfjg5y0v5vy1d60ra3sqhv5d6f4qlh-trial-optparse-applicative-0.0.0.0' '/nix/store/w2ks4341d6zb5ljyxy7763xqwhn9wfbm-trial-tomland-0.0.0.0' '/nix/store/qx6vph65fvxf58nn3pdqj26icziy58zs-hls-stylish-haskell-plugin-2.6.0.0' '/nix/store/i2h3ibj2p8v597ic36x4hsf6dhw91d3x-stylish-haskell-0.14.5.0' '/nix/store/ygl47jsi4cs0b9gza0sh3pkhcw7g9a2l-HsYAML-0.2.1.3' '/nix/store/ib9zgnf8p30wnpibgfzcbq96ihlwdw4q-HsYAML-aeson-0.2.0.1' '/nix/store/ib9zgnf8p30wnpibgfzcbq96ihlwdw4q-HsYAML-aeson-0.2.0.1' '/nix/store/yl88va8lc7wk1lvsfq221g59vzd9yya8-optparse-simple-0.1.1.4' '/nix/store/yl88va8lc7wk1lvsfq221g59vzd9yya8-optparse-simple-0.1.1.4' '/nix/store/3125ahv429pk8sxnfhj5l3f2ph7jllrk-patchelf-0.15.0' '/nix/store/zfgzsn57hhv547x3qmxgpf9y8a320mjr-update-autotools-gnu-config-scripts-hook' '/nix/store/h9lc1dpi14z7is86ffhl3ld569138595-audit-tmpdir.sh' '/nix/store/m54bmrhj6fqz8nds5zcj97w9s9bckc9v-compress-man-pages.sh' '/nix/store/wgrbkkaldkrlrni33ccvm3b6vbxzb656-make-symlinks-relative.sh' '/nix/store/5yzw0vhkyszf2d179m0qfkgxmp5wjjx4-move-docs.sh' '/nix/store/fyaryjvghbkpfnsyw97hb3lyb37s1pd6-move-lib64.sh' '/nix/store/kd4xwxjpjxi71jkm6ka0np72if9rm3y0-move-sbin.sh' '/nix/store/pag6l61paj1dc9sv15l7bm5c17xn5kyk-move-systemd-user-units.sh' '/nix/store/jivxp510zxakaaic7qkrb7v1dd2rdbw9-multiple-outputs.sh' '/nix/store/ilaf1w22bxi6jsi45alhmvvdgy4ly3zs-patch-shebangs.sh' '/nix/store/cickvswrvann041nqxb0rxilc46svw1n-prune-libtool-files.sh' '/nix/store/xyff06pkhki3qy1ls77w10s0v79c9il0-reproducible-builds.sh' '/nix/store/ngg1cv31c8c7bcm2n8ww4g06nq7s4zhm-set-source-date-epoch-to-latest.sh' '/nix/store/wmknncrif06fqxa16hpdldhixk95nds0-strip.sh' '/nix/store/qhpw32pz39y6i30b3vrbw5fw6zv5549f-gcc-wrapper-13.2.0' '/nix/store/7hhd9smnjspppk4k6n47bkw64fdbgbrz-binutils-wrapper-2.41' ) +declare -a pkgsBuildTarget=() +declare -a pkgsHostHost=('/nix/store/w6aci43k9bdvrkz9nwfx2dqw67h0llmq-ncurses-6.4' '/nix/store/jx5kkzn0dhxa5y5k1fs9ymbvha15r911-libffi-3.4.6' '/nix/store/3frbd0spychry5hg7jfajaiga271nwk1-elfutils-0.190' '/nix/store/wx2ngazi4zyx1gi55kz3p9q8y6497fsk-gmp-with-cxx-6.3.0' '/nix/store/w6aci43k9bdvrkz9nwfx2dqw67h0llmq-ncurses-6.4' ) +declare -a pkgsHostTarget=() +declare -a pkgsTargetTarget=() +declare -a postFixupHooks=('_makeSymlinksRelativeInAllOutputs' '_multioutPropagateDev' ) +declare -a postUnpackHooks=('_updateSourceDateEpochFromSourceRoot' ) +declare -a preConfigureHooks=('_multioutConfig' ) +preConfigurePhases=' updateAutotoolsGnuConfigScriptsPhase' +declare -a preFixupHooks=('_moveToShare' '_multioutDocs' '_multioutDevs' ) +prefix='/home/leonv/Git/Sudoku/outputs/out' +declare -a propagatedBuildDepFiles=('propagated-build-build-deps' 'propagated-native-build-inputs' 'propagated-build-target-deps' ) +propagatedBuildInputs='' +export propagatedBuildInputs +declare -a propagatedHostDepFiles=('propagated-host-host-deps' 'propagated-build-inputs' ) +propagatedNativeBuildInputs='' +export propagatedNativeBuildInputs +declare -a propagatedTargetDepFiles=('propagated-target-target-deps' ) +shell='/nix/store/4vzal97iq3dmrgycj8r0gflrh51p8w1s-bash-5.2p26/bin/bash' +export shell +shellHook='' +export shellHook +stdenv='/nix/store/v099hqvw5z87423p4hz1vfhzaqa07dii-stdenv-linux' +export stdenv +strictDeps='' +export strictDeps +system='x86_64-linux' +export system +declare -a unpackCmdHooks=('_defaultUnpack' ) +_accumFlagsArray () +{ + + local name; + if [ -n "$__structuredAttrs" ]; then + for name in "$@"; + do + local -n nameref="$name"; + flagsArray+=(${nameref+"${nameref[@]}"}); + done; + else + for name in "$@"; + do + local -n nameref="$name"; + case "$name" in + *Array) + flagsArray+=(${nameref+"${nameref[@]}"}) + ;; + *) + flagsArray+=(${nameref-}) + ;; + esac; + done; + fi +} +_activatePkgs () +{ + + local hostOffset targetOffset; + local pkg; + for hostOffset in "${allPlatOffsets[@]}"; + do + local pkgsVar="${pkgAccumVarVars[hostOffset + 1]}"; + for targetOffset in "${allPlatOffsets[@]}"; + do + (( hostOffset <= targetOffset )) || continue; + local pkgsRef="${pkgsVar}[$targetOffset - $hostOffset]"; + local pkgsSlice="${!pkgsRef}[@]"; + for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; + do + activatePackage "$pkg" "$hostOffset" "$targetOffset"; + done; + done; + done +} +_addRpathPrefix () +{ + + if [ "${NIX_NO_SELF_RPATH:-0}" != 1 ]; then + export NIX_LDFLAGS="-rpath $1/lib ${NIX_LDFLAGS-}"; + fi +} +_addToEnv () +{ + + local depHostOffset depTargetOffset; + local pkg; + for depHostOffset in "${allPlatOffsets[@]}"; + do + local hookVar="${pkgHookVarVars[depHostOffset + 1]}"; + local pkgsVar="${pkgAccumVarVars[depHostOffset + 1]}"; + for depTargetOffset in "${allPlatOffsets[@]}"; + do + (( depHostOffset <= depTargetOffset )) || continue; + local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]"; + if [[ -z "${strictDeps-}" ]]; then + local visitedPkgs=""; + for pkg in "${pkgsBuildBuild[@]}" "${pkgsBuildHost[@]}" "${pkgsBuildTarget[@]}" "${pkgsHostHost[@]}" "${pkgsHostTarget[@]}" "${pkgsTargetTarget[@]}"; + do + if [[ "$visitedPkgs" = *"$pkg"* ]]; then + continue; + fi; + runHook "${!hookRef}" "$pkg"; + visitedPkgs+=" $pkg"; + done; + else + local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"; + local pkgsSlice="${!pkgsRef}[@]"; + for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; + do + runHook "${!hookRef}" "$pkg"; + done; + fi; + done; + done +} +_allFlags () +{ + + export system pname name version; + for varName in $(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }'); + do + if (( "${NIX_DEBUG:-0}" >= 1 )); then + printf "@%s@ -> %q\n" "${varName}" "${!varName}" 1>&2; + fi; + args+=("--subst-var" "$varName"); + done +} +_assignFirst () +{ + + local varName="$1"; + local _var; + local REMOVE=REMOVE; + shift; + for _var in "$@"; + do + if [ -n "${!_var-}" ]; then + eval "${varName}"="${_var}"; + return; + fi; + done; + echo; + echo "error: _assignFirst: could not find a non-empty variable whose name to assign to ${varName}."; + echo " The following variables were all unset or empty:"; + echo " $*"; + if [ -z "${out:-}" ]; then + echo ' If you do not want an "out" output in your derivation, make sure to define'; + echo ' the other specific required outputs. This can be achieved by picking one'; + echo " of the above as an output."; + echo ' You do not have to remove "out" if you want to have a different default'; + echo ' output, because the first output is taken as a default.'; + echo; + fi; + return 1 +} +_callImplicitHook () +{ + + local def="$1"; + local hookName="$2"; + if declare -F "$hookName" > /dev/null; then + "$hookName"; + else + if type -p "$hookName" > /dev/null; then + source "$hookName"; + else + if [ -n "${!hookName:-}" ]; then + eval "${!hookName}"; + else + return "$def"; + fi; + fi; + fi +} +_defaultUnpack () +{ + + local fn="$1"; + local destination; + if [ -d "$fn" ]; then + destination="$(stripHash "$fn")"; + if [ -e "$destination" ]; then + echo "Cannot copy $fn to $destination: destination already exists!"; + echo "Did you specify two \"srcs\" with the same \"name\"?"; + return 1; + fi; + cp -pr --reflink=auto -- "$fn" "$destination"; + else + case "$fn" in + *.tar.xz | *.tar.lzma | *.txz) + ( XZ_OPT="--threads=$NIX_BUILD_CORES" xz -d < "$fn"; + true ) | tar xf - --warning=no-timestamp + ;; + *.tar | *.tar.* | *.tgz | *.tbz2 | *.tbz) + tar xf "$fn" --warning=no-timestamp + ;; + *) + return 1 + ;; + esac; + fi +} +_doStrip () +{ + + local -ra flags=(dontStripHost dontStripTarget); + local -ra debugDirs=(stripDebugList stripDebugListTarget); + local -ra allDirs=(stripAllList stripAllListTarget); + local -ra stripCmds=(STRIP STRIP_FOR_TARGET); + local -ra ranlibCmds=(RANLIB RANLIB_FOR_TARGET); + stripDebugList=${stripDebugList[*]:-lib lib32 lib64 libexec bin sbin}; + stripDebugListTarget=${stripDebugListTarget[*]:-}; + stripAllList=${stripAllList[*]:-}; + stripAllListTarget=${stripAllListTarget[*]:-}; + local i; + for i in ${!stripCmds[@]}; + do + local -n flag="${flags[$i]}"; + local -n debugDirList="${debugDirs[$i]}"; + local -n allDirList="${allDirs[$i]}"; + local -n stripCmd="${stripCmds[$i]}"; + local -n ranlibCmd="${ranlibCmds[$i]}"; + if [[ -n "${dontStrip-}" || -n "${flag-}" ]] || ! type -f "${stripCmd-}" 2> /dev/null 1>&2; then + continue; + fi; + stripDirs "$stripCmd" "$ranlibCmd" "$debugDirList" "${stripDebugFlags[*]:--S -p}"; + stripDirs "$stripCmd" "$ranlibCmd" "$allDirList" "${stripAllFlags[*]:--s -p}"; + done +} +_eval () +{ + + if declare -F "$1" > /dev/null 2>&1; then + "$@"; + else + eval "$1"; + fi +} +_makeSymlinksRelative () +{ + + local symlinkTarget; + if [ "${dontRewriteSymlinks-}" ] || [ ! -e "$prefix" ]; then + return; + fi; + while IFS= read -r -d '' f; do + symlinkTarget=$(readlink "$f"); + if [[ "$symlinkTarget"/ != "$prefix"/* ]]; then + continue; + fi; + if [ ! -e "$symlinkTarget" ]; then + echo "the symlink $f is broken, it points to $symlinkTarget (which is missing)"; + fi; + echo "rewriting symlink $f to be relative to $prefix"; + ln -snrf "$symlinkTarget" "$f"; + done < <(find $prefix -type l -print0) +} +_makeSymlinksRelativeInAllOutputs () +{ + + local output; + for output in $(getAllOutputNames); + do + prefix="${!output}" _makeSymlinksRelative; + done +} +_moveLib64 () +{ + + if [ "${dontMoveLib64-}" = 1 ]; then + return; + fi; + if [ ! -e "$prefix/lib64" -o -L "$prefix/lib64" ]; then + return; + fi; + echo "moving $prefix/lib64/* to $prefix/lib"; + mkdir -p $prefix/lib; + shopt -s dotglob; + for i in $prefix/lib64/*; + do + mv --no-clobber "$i" $prefix/lib; + done; + shopt -u dotglob; + rmdir $prefix/lib64; + ln -s lib $prefix/lib64 +} +_moveSbin () +{ + + if [ "${dontMoveSbin-}" = 1 ]; then + return; + fi; + if [ ! -e "$prefix/sbin" -o -L "$prefix/sbin" ]; then + return; + fi; + echo "moving $prefix/sbin/* to $prefix/bin"; + mkdir -p $prefix/bin; + shopt -s dotglob; + for i in $prefix/sbin/*; + do + mv "$i" $prefix/bin; + done; + shopt -u dotglob; + rmdir $prefix/sbin; + ln -s bin $prefix/sbin +} +_moveSystemdUserUnits () +{ + + if [ "${dontMoveSystemdUserUnits:-0}" = 1 ]; then + return; + fi; + if [ ! -e "${prefix:?}/lib/systemd/user" ]; then + return; + fi; + local source="$prefix/lib/systemd/user"; + local target="$prefix/share/systemd/user"; + echo "moving $source/* to $target"; + mkdir -p "$target"; + ( shopt -s dotglob; + for i in "$source"/*; + do + mv "$i" "$target"; + done ); + rmdir "$source"; + ln -s "$target" "$source" +} +_moveToShare () +{ + + if [ -n "$__structuredAttrs" ]; then + if [ -z "${forceShare-}" ]; then + forceShare=(man doc info); + fi; + else + forceShare=(${forceShare:-man doc info}); + fi; + if [[ -z "$out" ]]; then + return; + fi; + for d in "${forceShare[@]}"; + do + if [ -d "$out/$d" ]; then + if [ -d "$out/share/$d" ]; then + echo "both $d/ and share/$d/ exist!"; + else + echo "moving $out/$d to $out/share/$d"; + mkdir -p $out/share; + mv $out/$d $out/share/; + fi; + fi; + done +} +_multioutConfig () +{ + + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${setOutputFlags-1}" ]; then + return; + fi; + if [ -z "${shareDocName:-}" ]; then + local confScript="${configureScript:-}"; + if [ -z "$confScript" ] && [ -x ./configure ]; then + confScript=./configure; + fi; + if [ -f "$confScript" ]; then + local shareDocName="$(sed -n "s/^PACKAGE_TARNAME='\(.*\)'$/\1/p" < "$confScript")"; + fi; + if [ -z "$shareDocName" ] || echo "$shareDocName" | grep -q '[^a-zA-Z0-9_-]'; then + shareDocName="$(echo "$name" | sed 's/-[^a-zA-Z].*//')"; + fi; + fi; + prependToVar configureFlags --bindir="${!outputBin}"/bin --sbindir="${!outputBin}"/sbin --includedir="${!outputInclude}"/include --oldincludedir="${!outputInclude}"/include --mandir="${!outputMan}"/share/man --infodir="${!outputInfo}"/share/info --docdir="${!outputDoc}"/share/doc/"${shareDocName}" --libdir="${!outputLib}"/lib --libexecdir="${!outputLib}"/libexec --localedir="${!outputLib}"/share/locale; + prependToVar installFlags pkgconfigdir="${!outputDev}"/lib/pkgconfig m4datadir="${!outputDev}"/share/aclocal aclocaldir="${!outputDev}"/share/aclocal +} +_multioutDevs () +{ + + if [ "$(getAllOutputNames)" = "out" ] || [ -z "${moveToDev-1}" ]; then + return; + fi; + moveToOutput include "${!outputInclude}"; + moveToOutput lib/pkgconfig "${!outputDev}"; + moveToOutput share/pkgconfig "${!outputDev}"; + moveToOutput lib/cmake "${!outputDev}"; + moveToOutput share/aclocal "${!outputDev}"; + for f in "${!outputDev}"/{lib,share}/pkgconfig/*.pc; + do + echo "Patching '$f' includedir to output ${!outputInclude}"; + sed -i "/^includedir=/s,=\${prefix},=${!outputInclude}," "$f"; + done +} +_multioutDocs () +{ + + local REMOVE=REMOVE; + moveToOutput share/info "${!outputInfo}"; + moveToOutput share/doc "${!outputDoc}"; + moveToOutput share/gtk-doc "${!outputDevdoc}"; + moveToOutput share/devhelp/books "${!outputDevdoc}"; + moveToOutput share/man "${!outputMan}"; + moveToOutput share/man/man3 "${!outputDevman}" +} +_multioutPropagateDev () +{ + + if [ "$(getAllOutputNames)" = "out" ]; then + return; + fi; + local outputFirst; + for outputFirst in $(getAllOutputNames); + do + break; + done; + local propagaterOutput="$outputDev"; + if [ -z "$propagaterOutput" ]; then + propagaterOutput="$outputFirst"; + fi; + if [ -z "${propagatedBuildOutputs+1}" ]; then + local po_dirty="$outputBin $outputInclude $outputLib"; + set +o pipefail; + propagatedBuildOutputs=`echo "$po_dirty" | tr -s ' ' '\n' | grep -v -F "$propagaterOutput" | sort -u | tr '\n' ' ' `; + set -o pipefail; + fi; + if [ -z "$propagatedBuildOutputs" ]; then + return; + fi; + mkdir -p "${!propagaterOutput}"/nix-support; + for output in $propagatedBuildOutputs; + do + echo -n " ${!output}" >> "${!propagaterOutput}"/nix-support/propagated-build-inputs; + done +} +_overrideFirst () +{ + + if [ -z "${!1-}" ]; then + _assignFirst "$@"; + fi +} +_pruneLibtoolFiles () +{ + + if [ "${dontPruneLibtoolFiles-}" ] || [ ! -e "$prefix" ]; then + return; + fi; + find "$prefix" -type f -name '*.la' -exec grep -q '^# Generated by .*libtool' {} \; -exec grep -q "^old_library=''" {} \; -exec sed -i {} -e "/^dependency_libs='[^']/ c dependency_libs='' #pruned" \; +} +_updateSourceDateEpochFromSourceRoot () +{ + + if [ -n "$sourceRoot" ]; then + updateSourceDateEpoch "$sourceRoot"; + fi +} +activatePackage () +{ + + local pkg="$1"; + local -r hostOffset="$2"; + local -r targetOffset="$3"; + (( hostOffset <= targetOffset )) || exit 1; + if [ -f "$pkg" ]; then + source "$pkg"; + fi; + if [[ -z "${strictDeps-}" || "$hostOffset" -le -1 ]]; then + addToSearchPath _PATH "$pkg/bin"; + fi; + if (( hostOffset <= -1 )); then + addToSearchPath _XDG_DATA_DIRS "$pkg/share"; + fi; + if [[ "$hostOffset" -eq 0 && -d "$pkg/bin" ]]; then + addToSearchPath _HOST_PATH "$pkg/bin"; + fi; + if [[ -f "$pkg/nix-support/setup-hook" ]]; then + source "$pkg/nix-support/setup-hook"; + fi +} +addEnvHooks () +{ + + local depHostOffset="$1"; + shift; + local pkgHookVarsSlice="${pkgHookVarVars[$depHostOffset + 1]}[@]"; + local pkgHookVar; + for pkgHookVar in "${!pkgHookVarsSlice}"; + do + eval "${pkgHookVar}s"'+=("$@")'; + done +} +addToSearchPath () +{ + + addToSearchPathWithCustomDelimiter ":" "$@" +} +addToSearchPathWithCustomDelimiter () +{ + + local delimiter="$1"; + local varName="$2"; + local dir="$3"; + if [[ -d "$dir" && "${!varName:+${delimiter}${!varName}${delimiter}}" != *"${delimiter}${dir}${delimiter}"* ]]; then + export "${varName}=${!varName:+${!varName}${delimiter}}${dir}"; + fi +} +appendToVar () +{ + + local -n nameref="$1"; + local useArray type; + if [ -n "$__structuredAttrs" ]; then + useArray=true; + else + useArray=false; + fi; + if declare -p "$1" 2> /dev/null | grep -q '^'; then + type="$(declare -p "$1")"; + if [[ "$type" =~ "declare -A" ]]; then + echo "appendToVar(): ERROR: trying to use appendToVar on an associative array, use variable+=([\"X\"]=\"Y\") instead." 1>&2; + return 1; + else + if [[ "$type" =~ "declare -a" ]]; then + useArray=true; + else + useArray=false; + fi; + fi; + fi; + shift; + if $useArray; then + nameref=(${nameref+"${nameref[@]}"} "$@"); + else + nameref="${nameref-} $*"; + fi +} +auditTmpdir () +{ + + local dir="$1"; + [ -e "$dir" ] || return 0; + echo "checking for references to $TMPDIR/ in $dir..."; + local i; + find "$dir" -type f -print0 | while IFS= read -r -d '' i; do + if [[ "$i" =~ .build-id ]]; then + continue; + fi; + if isELF "$i"; then + if { + printf :; + patchelf --print-rpath "$i" + } | grep -q -F ":$TMPDIR/"; then + echo "RPATH of binary $i contains a forbidden reference to $TMPDIR/"; + exit 1; + fi; + fi; + if isScript "$i"; then + if [ -e "$(dirname "$i")/.$(basename "$i")-wrapped" ]; then + if grep -q -F "$TMPDIR/" "$i"; then + echo "wrapper script $i contains a forbidden reference to $TMPDIR/"; + exit 1; + fi; + fi; + fi; + done +} +bintoolsWrapper_addLDVars () +{ + + local role_post; + getHostRoleEnvHook; + if [[ -d "$1/lib64" && ! -L "$1/lib64" ]]; then + export NIX_LDFLAGS${role_post}+=" -L$1/lib64"; + fi; + if [[ -d "$1/lib" ]]; then + local -a glob=($1/lib/lib*); + if [ "${#glob[*]}" -gt 0 ]; then + export NIX_LDFLAGS${role_post}+=" -L$1/lib"; + fi; + fi +} +buildPhase () +{ + + runHook preBuild; + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then + echo "no Makefile or custom buildPhase, doing nothing"; + else + foundMakefile=1; + local flagsArray=(${enableParallelBuilding:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); + _accumFlagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray; + echoCmd 'build flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + fi; + runHook postBuild +} +ccWrapper_addCVars () +{ + + local role_post; + getHostRoleEnvHook; + if [ -d "$1/include" ]; then + export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"; + fi; + if [ -d "$1/Library/Frameworks" ]; then + export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"; + fi +} +checkPhase () +{ + + runHook preCheck; + if [[ -z "${foundMakefile:-}" ]]; then + echo "no Makefile or custom checkPhase, doing nothing"; + runHook postCheck; + return; + fi; + if [[ -z "${checkTarget:-}" ]]; then + if make -n ${makefile:+-f $makefile} check > /dev/null 2>&1; then + checkTarget=check; + else + if make -n ${makefile:+-f $makefile} test > /dev/null 2>&1; then + checkTarget=test; + fi; + fi; + fi; + if [[ -z "${checkTarget:-}" ]]; then + echo "no check/test target in ${makefile:-Makefile}, doing nothing"; + else + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); + _accumFlagsArray makeFlags makeFlagsArray; + if [ -n "$__structuredAttrs" ]; then + flagsArray+=("${checkFlags[@]:-VERBOSE=y}"); + else + flagsArray+=(${checkFlags:-VERBOSE=y}); + fi; + _accumFlagsArray checkFlagsArray; + flagsArray+=(${checkTarget}); + echoCmd 'check flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + fi; + runHook postCheck +} +compressManPages () +{ + + local dir="$1"; + if [ -L "$dir"/share ] || [ -L "$dir"/share/man ] || [ ! -d "$dir/share/man" ]; then + return; + fi; + echo "gzipping man pages under $dir/share/man/"; + find "$dir"/share/man/ -type f -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | while IFS= read -r -d '' f; do + if gzip -c -n "$f" > "$f".gz; then + rm "$f"; + else + rm "$f".gz; + fi; + done; + find "$dir"/share/man/ -type l -a '!' -regex '.*\.\(bz2\|gz\|xz\)$' -print0 | sort -z | while IFS= read -r -d '' f; do + local target; + target="$(readlink -f "$f")"; + if [ -f "$target".gz ]; then + ln -sf "$target".gz "$f".gz && rm "$f"; + fi; + done +} +configurePhase () +{ + + runHook preConfigure; + : "${configureScript=}"; + if [[ -z "$configureScript" && -x ./configure ]]; then + configureScript=./configure; + fi; + if [ -z "${dontFixLibtool:-}" ]; then + export lt_cv_deplibs_check_method="${lt_cv_deplibs_check_method-pass_all}"; + local i; + find . -iname "ltmain.sh" -print0 | while IFS='' read -r -d '' i; do + echo "fixing libtool script $i"; + fixLibtool "$i"; + done; + CONFIGURE_MTIME_REFERENCE=$(mktemp configure.mtime.reference.XXXXXX); + find . -executable -type f -name configure -exec grep -l 'GNU Libtool is free software; you can redistribute it and/or modify' {} \; -exec touch -r {} "$CONFIGURE_MTIME_REFERENCE" \; -exec sed -i s_/usr/bin/file_file_g {} \; -exec touch -r "$CONFIGURE_MTIME_REFERENCE" {} \;; + rm -f "$CONFIGURE_MTIME_REFERENCE"; + fi; + if [[ -z "${dontAddPrefix:-}" && -n "$prefix" ]]; then + prependToVar configureFlags "${prefixKey:---prefix=}$prefix"; + fi; + if [[ -f "$configureScript" ]]; then + if [ -z "${dontAddDisableDepTrack:-}" ]; then + if grep -q dependency-tracking "$configureScript"; then + prependToVar configureFlags --disable-dependency-tracking; + fi; + fi; + if [ -z "${dontDisableStatic:-}" ]; then + if grep -q enable-static "$configureScript"; then + prependToVar configureFlags --disable-static; + fi; + fi; + if [ -z "${dontPatchShebangsInConfigure:-}" ]; then + patchShebangs --build "$configureScript"; + fi; + fi; + if [ -n "$configureScript" ]; then + local -a flagsArray; + _accumFlagsArray configureFlags configureFlagsArray; + echoCmd 'configure flags' "${flagsArray[@]}"; + $configureScript "${flagsArray[@]}"; + unset flagsArray; + else + echo "no configure script, doing nothing"; + fi; + runHook postConfigure +} +consumeEntire () +{ + + if IFS='' read -r -d '' "$1"; then + echo "consumeEntire(): ERROR: Input null bytes, won't process" 1>&2; + return 1; + fi +} +distPhase () +{ + + runHook preDist; + local flagsArray=(); + _accumFlagsArray distFlags distFlagsArray; + flagsArray+=(${distTarget:-dist}); + echo 'dist flags: %q' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + if [ "${dontCopyDist:-0}" != 1 ]; then + mkdir -p "$out/tarballs"; + cp -pvd ${tarballs[*]:-*.tar.gz} "$out/tarballs"; + fi; + runHook postDist +} +dumpVars () +{ + + if [ "${noDumpEnvVars:-0}" != 1 ]; then + export 2> /dev/null >| "$NIX_BUILD_TOP/env-vars" || true; + fi +} +echoCmd () +{ + + printf "%s:" "$1"; + shift; + printf ' %q' "$@"; + echo +} +exitHandler () +{ + + exitCode="$?"; + set +e; + if [ -n "${showBuildStats:-}" ]; then + read -r -d '' -a buildTimes < <(times); + echo "build times:"; + echo "user time for the shell ${buildTimes[0]}"; + echo "system time for the shell ${buildTimes[1]}"; + echo "user time for all child processes ${buildTimes[2]}"; + echo "system time for all child processes ${buildTimes[3]}"; + fi; + if (( "$exitCode" != 0 )); then + runHook failureHook; + if [ -n "${succeedOnFailure:-}" ]; then + echo "build failed with exit code $exitCode (ignored)"; + mkdir -p "$out/nix-support"; + printf "%s" "$exitCode" > "$out/nix-support/failed"; + exit 0; + fi; + else + runHook exitHook; + fi; + return "$exitCode" +} +findInputs () +{ + + local -r pkg="$1"; + local -r hostOffset="$2"; + local -r targetOffset="$3"; + (( hostOffset <= targetOffset )) || exit 1; + local varVar="${pkgAccumVarVars[hostOffset + 1]}"; + local varRef="$varVar[$((targetOffset - hostOffset))]"; + local var="${!varRef}"; + unset -v varVar varRef; + local varSlice="$var[*]"; + case "${!varSlice-}" in + *" $pkg "*) + return 0 + ;; + esac; + unset -v varSlice; + eval "$var"'+=("$pkg")'; + if ! [ -e "$pkg" ]; then + echo "build input $pkg does not exist" 1>&2; + exit 1; + fi; + function mapOffset () + { + local -r inputOffset="$1"; + local -n outputOffset="$2"; + if (( inputOffset <= 0 )); then + outputOffset=$((inputOffset + hostOffset)); + else + outputOffset=$((inputOffset - 1 + targetOffset)); + fi + }; + local relHostOffset; + for relHostOffset in "${allPlatOffsets[@]}"; + do + local files="${propagatedDepFilesVars[relHostOffset + 1]}"; + local hostOffsetNext; + mapOffset "$relHostOffset" hostOffsetNext; + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; + local relTargetOffset; + for relTargetOffset in "${allPlatOffsets[@]}"; + do + (( "$relHostOffset" <= "$relTargetOffset" )) || continue; + local fileRef="${files}[$relTargetOffset - $relHostOffset]"; + local file="${!fileRef}"; + unset -v fileRef; + local targetOffsetNext; + mapOffset "$relTargetOffset" targetOffsetNext; + (( -1 <= hostOffsetNext && hostOffsetNext <= 1 )) || continue; + [[ -f "$pkg/nix-support/$file" ]] || continue; + local pkgNext; + read -r -d '' pkgNext < "$pkg/nix-support/$file" || true; + for pkgNext in $pkgNext; + do + findInputs "$pkgNext" "$hostOffsetNext" "$targetOffsetNext"; + done; + done; + done +} +fixLibtool () +{ + + local search_path; + for flag in $NIX_LDFLAGS; + do + case $flag in + -L*) + search_path+=" ${flag#-L}" + ;; + esac; + done; + sed -i "$1" -e "s^eval \(sys_lib_search_path=\).*^\1'${search_path:-}'^" -e 's^eval sys_lib_.+search_path=.*^^' +} +fixupPhase () +{ + + local output; + for output in $(getAllOutputNames); + do + if [ -e "${!output}" ]; then + chmod -R u+w "${!output}"; + fi; + done; + runHook preFixup; + local output; + for output in $(getAllOutputNames); + do + prefix="${!output}" runHook fixupOutput; + done; + recordPropagatedDependencies; + if [ -n "${setupHook:-}" ]; then + mkdir -p "${!outputDev}/nix-support"; + substituteAll "$setupHook" "${!outputDev}/nix-support/setup-hook"; + fi; + if [ -n "${setupHooks:-}" ]; then + mkdir -p "${!outputDev}/nix-support"; + local hook; + for hook in ${setupHooks[@]}; + do + local content; + consumeEntire content < "$hook"; + substituteAllStream content "file '$hook'" >> "${!outputDev}/nix-support/setup-hook"; + unset -v content; + done; + unset -v hook; + fi; + if [ -n "${propagatedUserEnvPkgs:-}" ]; then + mkdir -p "${!outputBin}/nix-support"; + printWords $propagatedUserEnvPkgs > "${!outputBin}/nix-support/propagated-user-env-packages"; + fi; + runHook postFixup +} +genericBuild () +{ + + export GZIP_NO_TIMESTAMPS=1; + if [ -f "${buildCommandPath:-}" ]; then + source "$buildCommandPath"; + return; + fi; + if [ -n "${buildCommand:-}" ]; then + eval "$buildCommand"; + return; + fi; + if [ -z "${phases[*]:-}" ]; then + phases="${prePhases[*]:-} unpackPhase patchPhase ${preConfigurePhases[*]:-} configurePhase ${preBuildPhases[*]:-} buildPhase checkPhase ${preInstallPhases[*]:-} installPhase ${preFixupPhases[*]:-} fixupPhase installCheckPhase ${preDistPhases[*]:-} distPhase ${postPhases[*]:-}"; + fi; + for curPhase in ${phases[*]}; + do + runPhase "$curPhase"; + done +} +getAllOutputNames () +{ + + if [ -n "$__structuredAttrs" ]; then + echo "${!outputs[*]}"; + else + echo "$outputs"; + fi +} +getHostRole () +{ + + getRole "$hostOffset" +} +getHostRoleEnvHook () +{ + + getRole "$depHostOffset" +} +getRole () +{ + + case $1 in + -1) + role_post='_FOR_BUILD' + ;; + 0) + role_post='' + ;; + 1) + role_post='_FOR_TARGET' + ;; + *) + echo "binutils-wrapper-2.41: used as improper sort of dependency" 1>&2; + return 1 + ;; + esac +} +getTargetRole () +{ + + getRole "$targetOffset" +} +getTargetRoleEnvHook () +{ + + getRole "$depTargetOffset" +} +getTargetRoleWrapper () +{ + + case $targetOffset in + -1) + export NIX_BINTOOLS_WRAPPER_TARGET_BUILD_x86_64_unknown_linux_gnu=1 + ;; + 0) + export NIX_BINTOOLS_WRAPPER_TARGET_HOST_x86_64_unknown_linux_gnu=1 + ;; + 1) + export NIX_BINTOOLS_WRAPPER_TARGET_TARGET_x86_64_unknown_linux_gnu=1 + ;; + *) + echo "binutils-wrapper-2.41: used as improper sort of dependency" 1>&2; + return 1 + ;; + esac +} +installCheckPhase () +{ + + runHook preInstallCheck; + if [[ -z "${foundMakefile:-}" ]]; then + echo "no Makefile or custom installCheckPhase, doing nothing"; + else + if [[ -z "${installCheckTarget:-}" ]] && ! make -n ${makefile:+-f $makefile} "${installCheckTarget:-installcheck}" > /dev/null 2>&1; then + echo "no installcheck target in ${makefile:-Makefile}, doing nothing"; + else + local flagsArray=(${enableParallelChecking:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); + _accumFlagsArray makeFlags makeFlagsArray installCheckFlags installCheckFlagsArray; + flagsArray+=(${installCheckTarget:-installcheck}); + echoCmd 'installcheck flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + fi; + fi; + runHook postInstallCheck +} +installPhase () +{ + + runHook preInstall; + if [[ -z "${makeFlags-}" && -z "${makefile:-}" && ! ( -e Makefile || -e makefile || -e GNUmakefile ) ]]; then + echo "no Makefile or custom installPhase, doing nothing"; + runHook postInstall; + return; + else + foundMakefile=1; + fi; + if [ -n "$prefix" ]; then + mkdir -p "$prefix"; + fi; + local flagsArray=(${enableParallelInstalling:+-j${NIX_BUILD_CORES}} SHELL=$SHELL); + _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray; + if [ -n "$__structuredAttrs" ]; then + flagsArray+=("${installTargets[@]:-install}"); + else + flagsArray+=(${installTargets:-install}); + fi; + echoCmd 'install flags' "${flagsArray[@]}"; + make ${makefile:+-f $makefile} "${flagsArray[@]}"; + unset flagsArray; + runHook postInstall +} +isELF () +{ + + local fn="$1"; + local fd; + local magic; + exec {fd}< "$fn"; + read -r -n 4 -u "$fd" magic; + exec {fd}>&-; + if [ "$magic" = 'ELF' ]; then + return 0; + else + return 1; + fi +} +isMachO () +{ + + local fn="$1"; + local fd; + local magic; + exec {fd}< "$fn"; + read -r -n 4 -u "$fd" magic; + exec {fd}>&-; + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xcf") || "$magic" = $(echo -ne "\xcf\xfa\xed\xfe") ]]; then + return 0; + else + if [[ "$magic" = $(echo -ne "\xfe\xed\xfa\xce") || "$magic" = $(echo -ne "\xce\xfa\xed\xfe") ]]; then + return 0; + else + if [[ "$magic" = $(echo -ne "\xca\xfe\xba\xbe") || "$magic" = $(echo -ne "\xbe\xba\xfe\xca") ]]; then + return 0; + else + return 1; + fi; + fi; + fi +} +isScript () +{ + + local fn="$1"; + local fd; + local magic; + exec {fd}< "$fn"; + read -r -n 2 -u "$fd" magic; + exec {fd}>&-; + if [[ "$magic" =~ \#! ]]; then + return 0; + else + return 1; + fi +} +mapOffset () +{ + + local -r inputOffset="$1"; + local -n outputOffset="$2"; + if (( inputOffset <= 0 )); then + outputOffset=$((inputOffset + hostOffset)); + else + outputOffset=$((inputOffset - 1 + targetOffset)); + fi +} +moveToOutput () +{ + + local patt="$1"; + local dstOut="$2"; + local output; + for output in $(getAllOutputNames); + do + if [ "${!output}" = "$dstOut" ]; then + continue; + fi; + local srcPath; + for srcPath in "${!output}"/$patt; + do + if [ ! -e "$srcPath" ] && [ ! -L "$srcPath" ]; then + continue; + fi; + if [ "$dstOut" = REMOVE ]; then + echo "Removing $srcPath"; + rm -r "$srcPath"; + else + local dstPath="$dstOut${srcPath#${!output}}"; + echo "Moving $srcPath to $dstPath"; + if [ -d "$dstPath" ] && [ -d "$srcPath" ]; then + rmdir "$srcPath" --ignore-fail-on-non-empty; + if [ -d "$srcPath" ]; then + mv -t "$dstPath" "$srcPath"/*; + rmdir "$srcPath"; + fi; + else + mkdir -p "$(readlink -m "$dstPath/..")"; + mv "$srcPath" "$dstPath"; + fi; + fi; + local srcParent="$(readlink -m "$srcPath/..")"; + if [ -n "$(find "$srcParent" -maxdepth 0 -type d -empty 2> /dev/null)" ]; then + echo "Removing empty $srcParent/ and (possibly) its parents"; + rmdir -p --ignore-fail-on-non-empty "$srcParent" 2> /dev/null || true; + fi; + done; + done +} +patchELF () +{ + + local dir="$1"; + [ -e "$dir" ] || return 0; + echo "shrinking RPATHs of ELF executables and libraries in $dir"; + local i; + while IFS= read -r -d '' i; do + if [[ "$i" =~ .build-id ]]; then + continue; + fi; + if ! isELF "$i"; then + continue; + fi; + echo "shrinking $i"; + patchelf --shrink-rpath "$i" || true; + done < <(find "$dir" -type f -print0) +} +patchPhase () +{ + + runHook prePatch; + local -a patchesArray; + if [ -n "$__structuredAttrs" ]; then + patchesArray=(${patches:+"${patches[@]}"}); + else + patchesArray=(${patches:-}); + fi; + for i in "${patchesArray[@]}"; + do + echo "applying patch $i"; + local uncompress=cat; + case "$i" in + *.gz) + uncompress="gzip -d" + ;; + *.bz2) + uncompress="bzip2 -d" + ;; + *.xz) + uncompress="xz -d" + ;; + *.lzma) + uncompress="lzma -d" + ;; + esac; + local -a flagsArray; + if [ -n "$__structuredAttrs" ]; then + flagsArray=("${patchFlags[@]:--p1}"); + else + flagsArray=(${patchFlags:--p1}); + fi; + $uncompress < "$i" 2>&1 | patch "${flagsArray[@]}"; + done; + runHook postPatch +} +patchShebangs () +{ + + local pathName; + local update; + while [[ $# -gt 0 ]]; do + case "$1" in + --host) + pathName=HOST_PATH; + shift + ;; + --build) + pathName=PATH; + shift + ;; + --update) + update=true; + shift + ;; + --) + shift; + break + ;; + -* | --*) + echo "Unknown option $1 supplied to patchShebangs" 1>&2; + return 1 + ;; + *) + break + ;; + esac; + done; + echo "patching script interpreter paths in $@"; + local f; + local oldPath; + local newPath; + local arg0; + local args; + local oldInterpreterLine; + local newInterpreterLine; + if [[ $# -eq 0 ]]; then + echo "No arguments supplied to patchShebangs" 1>&2; + return 0; + fi; + local f; + while IFS= read -r -d '' f; do + isScript "$f" || continue; + read -r oldInterpreterLine < "$f" || [ "$oldInterpreterLine" ]; + read -r oldPath arg0 args <<< "${oldInterpreterLine:2}"; + if [[ -z "${pathName:-}" ]]; then + if [[ -n $strictDeps && $f == "$NIX_STORE"* ]]; then + pathName=HOST_PATH; + else + pathName=PATH; + fi; + fi; + if [[ "$oldPath" == *"/bin/env" ]]; then + if [[ $arg0 == "-S" ]]; then + arg0=${args%% *}; + args=${args#* }; + newPath="$(PATH="${!pathName}" command -v "env" || true)"; + args="-S $(PATH="${!pathName}" command -v "$arg0" || true) $args"; + else + if [[ $arg0 == "-"* || $arg0 == *"="* ]]; then + echo "$f: unsupported interpreter directive \"$oldInterpreterLine\" (set dontPatchShebangs=1 and handle shebang patching yourself)" 1>&2; + exit 1; + else + newPath="$(PATH="${!pathName}" command -v "$arg0" || true)"; + fi; + fi; + else + if [[ -z $oldPath ]]; then + oldPath="/bin/sh"; + fi; + newPath="$(PATH="${!pathName}" command -v "$(basename "$oldPath")" || true)"; + args="$arg0 $args"; + fi; + newInterpreterLine="$newPath $args"; + newInterpreterLine=${newInterpreterLine%${newInterpreterLine##*[![:space:]]}}; + if [[ -n "$oldPath" && ( "$update" == true || "${oldPath:0:${#NIX_STORE}}" != "$NIX_STORE" ) ]]; then + if [[ -n "$newPath" && "$newPath" != "$oldPath" ]]; then + echo "$f: interpreter directive changed from \"$oldInterpreterLine\" to \"$newInterpreterLine\""; + escapedInterpreterLine=${newInterpreterLine//\\/\\\\}; + timestamp=$(stat --printf "%y" "$f"); + sed -i -e "1 s|.*|#\!$escapedInterpreterLine|" "$f"; + touch --date "$timestamp" "$f"; + fi; + fi; + done < <(find "$@" -type f -perm -0100 -print0) +} +patchShebangsAuto () +{ + + if [[ -z "${dontPatchShebangs-}" && -e "$prefix" ]]; then + if [[ "$output" != out && "$output" = "$outputDev" ]]; then + patchShebangs --build "$prefix"; + else + patchShebangs --host "$prefix"; + fi; + fi +} +prependToVar () +{ + + local -n nameref="$1"; + local useArray type; + if [ -n "$__structuredAttrs" ]; then + useArray=true; + else + useArray=false; + fi; + if declare -p "$1" 2> /dev/null | grep -q '^'; then + type="$(declare -p "$1")"; + if [[ "$type" =~ "declare -A" ]]; then + echo "prependToVar(): ERROR: trying to use prependToVar on an associative array." 1>&2; + return 1; + else + if [[ "$type" =~ "declare -a" ]]; then + useArray=true; + else + useArray=false; + fi; + fi; + fi; + shift; + if $useArray; then + nameref=("$@" ${nameref+"${nameref[@]}"}); + else + nameref="$* ${nameref-}"; + fi +} +printLines () +{ + + (( "$#" > 0 )) || return 0; + printf '%s\n' "$@" +} +printWords () +{ + + (( "$#" > 0 )) || return 0; + printf '%s ' "$@" +} +recordPropagatedDependencies () +{ + + declare -ra flatVars=(depsBuildBuildPropagated propagatedNativeBuildInputs depsBuildTargetPropagated depsHostHostPropagated propagatedBuildInputs depsTargetTargetPropagated); + declare -ra flatFiles=("${propagatedBuildDepFiles[@]}" "${propagatedHostDepFiles[@]}" "${propagatedTargetDepFiles[@]}"); + local propagatedInputsIndex; + for propagatedInputsIndex in "${!flatVars[@]}"; + do + local propagatedInputsSlice="${flatVars[$propagatedInputsIndex]}[@]"; + local propagatedInputsFile="${flatFiles[$propagatedInputsIndex]}"; + [[ -n "${!propagatedInputsSlice}" ]] || continue; + mkdir -p "${!outputDev}/nix-support"; + printWords ${!propagatedInputsSlice} > "${!outputDev}/nix-support/$propagatedInputsFile"; + done +} +runHook () +{ + + local hookName="$1"; + shift; + local hooksSlice="${hookName%Hook}Hooks[@]"; + local hook; + for hook in "_callImplicitHook 0 $hookName" ${!hooksSlice+"${!hooksSlice}"}; + do + _eval "$hook" "$@"; + done; + return 0 +} +runOneHook () +{ + + local hookName="$1"; + shift; + local hooksSlice="${hookName%Hook}Hooks[@]"; + local hook ret=1; + for hook in "_callImplicitHook 1 $hookName" ${!hooksSlice+"${!hooksSlice}"}; + do + if _eval "$hook" "$@"; then + ret=0; + break; + fi; + done; + return "$ret" +} +runPhase () +{ + + local curPhase="$*"; + if [[ "$curPhase" = unpackPhase && -n "${dontUnpack:-}" ]]; then + return; + fi; + if [[ "$curPhase" = patchPhase && -n "${dontPatch:-}" ]]; then + return; + fi; + if [[ "$curPhase" = configurePhase && -n "${dontConfigure:-}" ]]; then + return; + fi; + if [[ "$curPhase" = buildPhase && -n "${dontBuild:-}" ]]; then + return; + fi; + if [[ "$curPhase" = checkPhase && -z "${doCheck:-}" ]]; then + return; + fi; + if [[ "$curPhase" = installPhase && -n "${dontInstall:-}" ]]; then + return; + fi; + if [[ "$curPhase" = fixupPhase && -n "${dontFixup:-}" ]]; then + return; + fi; + if [[ "$curPhase" = installCheckPhase && -z "${doInstallCheck:-}" ]]; then + return; + fi; + if [[ "$curPhase" = distPhase && -z "${doDist:-}" ]]; then + return; + fi; + if [[ -n $NIX_LOG_FD ]]; then + echo "@nix { \"action\": \"setPhase\", \"phase\": \"$curPhase\" }" >&"$NIX_LOG_FD"; + fi; + showPhaseHeader "$curPhase"; + dumpVars; + local startTime=$(date +"%s"); + eval "${!curPhase:-$curPhase}"; + local endTime=$(date +"%s"); + showPhaseFooter "$curPhase" "$startTime" "$endTime"; + if [ "$curPhase" = unpackPhase ]; then + [ -n "${sourceRoot:-}" ] && chmod +x "${sourceRoot}"; + cd "${sourceRoot:-.}"; + fi +} +showPhaseFooter () +{ + + local phase="$1"; + local startTime="$2"; + local endTime="$3"; + local delta=$(( endTime - startTime )); + (( delta < 30 )) && return; + local H=$((delta/3600)); + local M=$((delta%3600/60)); + local S=$((delta%60)); + echo -n "$phase completed in "; + (( H > 0 )) && echo -n "$H hours "; + (( M > 0 )) && echo -n "$M minutes "; + echo "$S seconds" +} +showPhaseHeader () +{ + + local phase="$1"; + echo "Running phase: $phase" +} +stripDirs () +{ + + local cmd="$1"; + local ranlibCmd="$2"; + local paths="$3"; + local stripFlags="$4"; + local excludeFlags=(); + local pathsNew=; + [ -z "$cmd" ] && echo "stripDirs: Strip command is empty" 1>&2 && exit 1; + [ -z "$ranlibCmd" ] && echo "stripDirs: Ranlib command is empty" 1>&2 && exit 1; + local pattern; + if [ -n "${stripExclude:-}" ]; then + for pattern in "${stripExclude[@]}"; + do + excludeFlags+=(-a '!' '(' -name "$pattern" -o -wholename "$prefix/$pattern" ')'); + done; + fi; + local p; + for p in ${paths}; + do + if [ -e "$prefix/$p" ]; then + pathsNew="${pathsNew} $prefix/$p"; + fi; + done; + paths=${pathsNew}; + if [ -n "${paths}" ]; then + echo "stripping (with command $cmd and flags $stripFlags) in $paths"; + local striperr; + striperr="$(mktemp --tmpdir="$TMPDIR" 'striperr.XXXXXX')"; + find $paths -type f "${excludeFlags[@]}" -a '!' -path "$prefix/lib/debug/*" -print0 | xargs -r -0 -n1 -- realpath -z | sort -u -z | xargs -r -0 -n1 -P "$NIX_BUILD_CORES" -- $cmd $stripFlags 2> "$striperr" || exit_code=$?; + [[ "$exit_code" = 123 || -z "$exit_code" ]] || ( cat "$striperr" 1>&2 && exit 1 ); + rm "$striperr"; + find $paths -name '*.a' -type f -exec $ranlibCmd '{}' \; 2> /dev/null; + fi +} +stripHash () +{ + + local strippedName casematchOpt=0; + strippedName="$(basename -- "$1")"; + shopt -q nocasematch && casematchOpt=1; + shopt -u nocasematch; + if [[ "$strippedName" =~ ^[a-z0-9]{32}- ]]; then + echo "${strippedName:33}"; + else + echo "$strippedName"; + fi; + if (( casematchOpt )); then + shopt -s nocasematch; + fi +} +substitute () +{ + + local input="$1"; + local output="$2"; + shift 2; + if [ ! -f "$input" ]; then + echo "substitute(): ERROR: file '$input' does not exist" 1>&2; + return 1; + fi; + local content; + consumeEntire content < "$input"; + if [ -e "$output" ]; then + chmod +w "$output"; + fi; + substituteStream content "file '$input'" "$@" > "$output" +} +substituteAll () +{ + + local input="$1"; + local output="$2"; + local -a args=(); + _allFlags; + substitute "$input" "$output" "${args[@]}" +} +substituteAllInPlace () +{ + + local fileName="$1"; + shift; + substituteAll "$fileName" "$fileName" "$@" +} +substituteAllStream () +{ + + local -a args=(); + _allFlags; + substituteStream "$1" "$2" "${args[@]}" +} +substituteInPlace () +{ + + local -a fileNames=(); + for arg in "$@"; + do + if [[ "$arg" = "--"* ]]; then + break; + fi; + fileNames+=("$arg"); + shift; + done; + for file in "${fileNames[@]}"; + do + substitute "$file" "$file" "$@"; + done +} +substituteStream () +{ + + local var=$1; + local description=$2; + shift 2; + while (( "$#" )); do + local replace_mode="$1"; + case "$1" in + --replace) + if ! "$_substituteStream_has_warned_replace_deprecation"; then + echo "substituteStream(): WARNING: '--replace' is deprecated, use --replace-{fail,warn,quiet}. ($description)" 1>&2; + _substituteStream_has_warned_replace_deprecation=true; + fi; + replace_mode='--replace-warn' + ;& + --replace-quiet | --replace-warn | --replace-fail) + pattern="$2"; + replacement="$3"; + shift 3; + local savedvar; + savedvar="${!var}"; + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; + if [ "$pattern" != "$replacement" ]; then + if [ "${!var}" == "$savedvar" ]; then + if [ "$replace_mode" == --replace-warn ]; then + printf "substituteStream(): WARNING: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; + else + if [ "$replace_mode" == --replace-fail ]; then + printf "substituteStream(): ERROR: pattern %q doesn't match anything in %s\n" "$pattern" "$description" 1>&2; + return 1; + fi; + fi; + fi; + fi + ;; + --subst-var) + local varName="$2"; + shift 2; + if ! [[ "$varName" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then + echo "substituteStream(): ERROR: substitution variables must be valid Bash names, \"$varName\" isn't." 1>&2; + return 1; + fi; + if [ -z ${!varName+x} ]; then + echo "substituteStream(): ERROR: variable \$$varName is unset" 1>&2; + return 1; + fi; + pattern="@$varName@"; + replacement="${!varName}"; + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}' + ;; + --subst-var-by) + pattern="@$2@"; + replacement="$3"; + eval "$var"'=${'"$var"'//"$pattern"/"$replacement"}'; + shift 3 + ;; + *) + echo "substituteStream(): ERROR: Invalid command line argument: $1" 1>&2; + return 1 + ;; + esac; + done; + printf "%s" "${!var}" +} +unpackFile () +{ + + curSrc="$1"; + echo "unpacking source archive $curSrc"; + if ! runOneHook unpackCmd "$curSrc"; then + echo "do not know how to unpack source archive $curSrc"; + exit 1; + fi +} +unpackPhase () +{ + + runHook preUnpack; + if [ -z "${srcs:-}" ]; then + if [ -z "${src:-}" ]; then + echo 'variable $src or $srcs should point to the source'; + exit 1; + fi; + srcs="$src"; + fi; + local -a srcsArray; + if [ -n "$__structuredAttrs" ]; then + srcsArray=("${srcs[@]}"); + else + srcsArray=($srcs); + fi; + local dirsBefore=""; + for i in *; + do + if [ -d "$i" ]; then + dirsBefore="$dirsBefore $i "; + fi; + done; + for i in "${srcsArray[@]}"; + do + unpackFile "$i"; + done; + : "${sourceRoot=}"; + if [ -n "${setSourceRoot:-}" ]; then + runOneHook setSourceRoot; + else + if [ -z "$sourceRoot" ]; then + for i in *; + do + if [ -d "$i" ]; then + case $dirsBefore in + *\ $i\ *) + + ;; + *) + if [ -n "$sourceRoot" ]; then + echo "unpacker produced multiple directories"; + exit 1; + fi; + sourceRoot="$i" + ;; + esac; + fi; + done; + fi; + fi; + if [ -z "$sourceRoot" ]; then + echo "unpacker appears to have produced no directories"; + exit 1; + fi; + echo "source root is $sourceRoot"; + if [ "${dontMakeSourcesWritable:-0}" != 1 ]; then + chmod -R u+w -- "$sourceRoot"; + fi; + runHook postUnpack +} +updateAutotoolsGnuConfigScriptsPhase () +{ + + if [ -n "${dontUpdateAutotoolsGnuConfigScripts-}" ]; then + return; + fi; + for script in config.sub config.guess; + do + for f in $(find . -type f -name "$script"); + do + echo "Updating Autotools / GNU config script to a newer upstream version: $f"; + cp -f "/nix/store/27g0inj79hpzaw31kqshbv5v9caz3qac-gnu-config-2023-09-19/$script" "$f"; + done; + done +} +updateSourceDateEpoch () +{ + + local path="$1"; + local -a res=($(find "$path" -type f -not -newer "$NIX_BUILD_TOP/.." -printf '%T@ %p\0' | sort -n --zero-terminated | tail -n1 --zero-terminated | head -c -1)); + local time="${res[0]//\.[0-9]*/}"; + local newestFile="${res[1]}"; + if [ "${time:-0}" -gt "$SOURCE_DATE_EPOCH" ]; then + echo "setting SOURCE_DATE_EPOCH to timestamp $time of file $newestFile"; + export SOURCE_DATE_EPOCH="$time"; + local now="$(date +%s)"; + if [ "$time" -gt $((now - 60)) ]; then + echo "warning: file $newestFile may be generated; SOURCE_DATE_EPOCH may be non-deterministic"; + fi; + fi +} +PATH="$PATH${nix_saved_PATH:+:$nix_saved_PATH}" +XDG_DATA_DIRS="$XDG_DATA_DIRS${nix_saved_XDG_DATA_DIRS:+:$nix_saved_XDG_DATA_DIRS}" +export NIX_BUILD_TOP="$(mktemp -d -t nix-shell.XXXXXX)" +export TMP="$NIX_BUILD_TOP" +export TMPDIR="$NIX_BUILD_TOP" +export TEMP="$NIX_BUILD_TOP" +export TEMPDIR="$NIX_BUILD_TOP" +eval "$shellHook" diff --git a/.envrc b/.envrc index 8392d15..3550a30 100644 --- a/.envrc +++ b/.envrc @@ -1 +1 @@ -use flake \ No newline at end of file +use flake diff --git a/src/CHANGELOG.md b/CHANGELOG.md similarity index 100% rename from src/CHANGELOG.md rename to CHANGELOG.md diff --git a/LICENSE b/LICENSE index edb01d0..d5b15c8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,9 +1,20 @@ -MIT License +Copyright (c) 2024 Leon Vatthauer -Copyright (c) 2024 leonv +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/Sudoku.cabal b/Sudoku.cabal similarity index 100% rename from src/Sudoku.cabal rename to Sudoku.cabal diff --git a/src/app/Main.hs b/app/Main.hs similarity index 100% rename from src/app/Main.hs rename to app/Main.hs diff --git a/src/LICENSE b/src/LICENSE deleted file mode 100644 index d5b15c8..0000000 --- a/src/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2024 Leon Vatthauer - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/src/Types.hs b/src/src/Types.hs deleted file mode 100644 index 72dcedf..0000000 --- a/src/src/Types.hs +++ /dev/null @@ -1,97 +0,0 @@ -{-# LANGUAGE InstanceSigs #-} - -module Types where - -import Control.Monad.State (State) -import Data.Char (digitToInt, intToDigit) -import Data.Vector (Vector) - --- * Stateful Sudoku Type - -data SudokuState = SudokuState - { dimension :: Int, - grid :: Vector Int, - idxs :: Vector (Int, Int) - } - -type SudokuMonad = State SudokuState - -getField :: (Int, Int) -> SudokuMonad Int -getField (x, y) = do - state <- get - return $ (x + y * dimension state) ! grid state - -getRow :: (Int, Int) -> SudokuMonad Int -getRow (x, _) = return x - -getCol :: (Int, Int) -> SudokuMonad Int -getCol (_, y) = return y - -getBox :: (Int, Int) -> SudokuMonad Int -getBox (x, y) = do - d <- gets dimension - let xPart = x `div` d - let yPart = y `div` d - return $ xPart + d * yPart - --- * Stateless Sudoku Type - --- - --- $statelessFlattened --- --- Here we define a simpler Sudoku type that would be very inneficient to work with --- but is suitable for pretty printing and reading - --- | Contains metadata concerning a Sudoku field -data Sudoku = Sudoku - { -- | The dim of the Sudoku, e.g. a 9x9 Sudoku field has dim 3 - dim :: Int, - -- | The Sudoku field as a flattened list - grd :: [Int] - } - -instance Show Sudoku where - show :: Sudoku -> String - show = map intToDigit . grd - -instance Read Sudoku where - readsPrec :: Int -> ReadS Sudoku - readsPrec _ s = - if isInt dimDouble - then [(Sudoku (floor dimDouble) (map digitToInt s), "")] - else error ("Trying to parse malformed sudoku (number of digits [" ++ show (length s) ++ "] is not a quadratic root):\n" ++ s) - where - isInt x = x == fromInteger (round x) - dimDouble = sqrt . sqrt $ (fromIntegral (length s) :: Double) - --- | Pretty printing of values. Analogous to the `Show` class, but does not harmonize with `Read`. -class Pretty a where - -- | Works like `show`, but is not inverse to `read`. - pretty :: a -> String - --- TODO improve pretty printer, this is kind of a mess -instance Pretty Sudoku where - pretty :: Sudoku -> String - pretty s = prettyHelper (dim s - 1, dim s, grd s) - where - -- prettyBlock (isLast, n, list) - prettyBlock :: (Bool, Int, [Int]) -> String - prettyBlock (_, _, []) = "" - prettyBlock (True, n, _) | n == 0 = "" - prettyBlock (False, n, _) | n == 0 = "|" - prettyBlock (b, n, x : xs) = intToDigit x : ' ' : prettyBlock (b, n - 1, xs) - -- prettyRow (n, dim, list) - prettyRow :: (Int, Int, [Int]) -> String - prettyRow (n, dim, xs) | n == 0 = prettyBlock (True, dim, xs) - prettyRow (n, dim, xs) = prettyBlock (False, dim, xs) ++ (' ' : prettyRow (n - 1, dim, drop dim xs)) - -- prettyCol (isLast, n, dim, list) - prettyCol :: (Bool, Int, Int, [Int]) -> String - prettyCol (True, n, _, _) | n == 0 = "" - prettyCol (False, n, dim, _) | n == 0 = replicate (2 * dim * dim - 1 + 2 * (dim - 1)) '-' - prettyCol (_, _, _, []) = "" - prettyCol (b, n, dim, xs) = prettyRow (dim - 1, dim, xs) ++ ('\n' : prettyCol (b, n - 1, dim, drop (dim * dim) xs)) - -- prettyHelper (n, dim, list) - prettyHelper :: (Int, Int, [Int]) -> String - prettyHelper (n, dim, xs) | n == 0 = prettyCol (True, dim, dim, xs) - prettyHelper (n, dim, xs) = prettyCol (False, dim, dim, xs) ++ ('\n' : prettyHelper (n - 1, dim, drop (dim * dim) xs)) diff --git a/src/test/Main.hs b/test/Main.hs similarity index 100% rename from src/test/Main.hs rename to test/Main.hs