)]}'
{"id":"depot~8651","triplet_id":"depot~canon~I1fa53f744bcffc035da84c1f97ed25d146830446","project":"depot","branch":"canon","attention_set":{},"removed_from_attention_set":{"1000034":{"account":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"last_update":"2023-05-26 22:35:39.000000000","reason":"Change was submitted"},"1000001":{"account":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"last_update":"2023-05-26 22:35:33.000000000","reason":"removed on reply"}},"hashtags":[],"change_id":"I1fa53f744bcffc035da84c1f97ed25d146830446","subject":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs","status":"MERGED","created":"2023-05-26 18:59:48.000000000","updated":"2023-05-26 22:35:39.000000000","submitted":"2023-05-26 22:35:39.000000000","submitter":{"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"8651","meta_rev_id":"562622d13956876650b1465ef0ed9b3ba6f57cf6","_number":8651,"virtual_id_number":8651,"owner":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"actions":{},"labels":{"Code-Review":{"approved":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"tag":"autogenerated:gerrit:merged","value":2,"date":"2023-05-26 22:35:39.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{"-2":"This shall not be merged","-1":"I would prefer this is not merged as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0},"Verified":{"approved":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},{"tag":"autogenerated:gerrit:merged","value":1,"date":"2023-05-26 22:35:39.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{"-1":"Fails"," 0":"No score","+1":"Verified"},"description":"","default_value":0},"Autosubmit":{"approved":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"all":[{"tag":"autogenerated:gerrit:merged","value":1,"date":"2023-05-26 22:35:39.000000000","_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{" 0":"Submit manually","+1":"Submit automatically"},"description":"","default_value":0,"optional":true},"All-Comments-Resolved":{"approved":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}]},"Conformant-Commit-Message":{"approved":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"all":[{"value":0,"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}]}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},{"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2023-05-26 18:59:50.000000000","updated_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2023-05-26 19:00:41.000000000","updated_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"reviewer":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"state":"REVIEWER"},{"updated":"2023-05-26 19:04:01.000000000","updated_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2023-05-26 22:35:39.000000000","updated_by":{"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"e2dcf08aaae90392a272fb4d8cf1c2a054cbff2f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2023-05-26 18:59:48.000000000","message":"Uploaded patch set 1: Autosubmit+1.","accounts_in_message":[],"_revision_number":1},{"id":"0d9b6f559fd5d478031aecb84251f1d6c186d3fa","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2023-05-26 18:59:50.000000000","message":"Patch Set 1:\n\nStarted build for patchset #1 on: https://buildkite.com/tvl/depot/builds/24725","accounts_in_message":[],"_revision_number":1},{"id":"d6154e5e0f7dfec1baa9de6adab3e000875e9c8a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2023-05-26 19:00:31.000000000","message":"Uploaded patch set 2.\n\nCopied Votes:\n* Autosubmit+1 (copy condition: \"changekind:NO_CHANGE OR is:ANY\")\n","accounts_in_message":[],"_revision_number":2},{"id":"ec1009a990fd490b97b636f671241610e2f299fc","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2023-05-26 19:00:32.000000000","message":"Patch Set 2:\n\nStarted build for patchset #2 on: https://buildkite.com/tvl/depot/builds/24726","accounts_in_message":[],"_revision_number":2},{"id":"bd35552a27ad7da8aded480894a38109dd2b6f41","tag":"autogenerated:gerrit:code-owners:addReviewer","author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"date":"2023-05-26 19:00:41.000000000","message":"\u003cGERRIT_ACCOUNT_1000001\u003e, who was added as reviewer owns the following files:\n* tvix/eval/src/builtins/mod.rs\n* tvix/eval/src/tests/tvix_tests/eval-okay-builtins-thunked-function-calls.exp\n* tvix/eval/src/tests/tvix_tests/eval-okay-builtins-thunked-function-calls.nix\n* tvix/eval/src/value/thunk.rs\n","accounts_in_message":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}],"_revision_number":2},{"id":"44f2577d418568c92666a189d9b698b15df5735e","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2023-05-26 19:04:01.000000000","message":"Patch Set 1: Verified+1\n\nBuild of patchset 1 passed: https://buildkite.com/tvl/depot/builds/24725","accounts_in_message":[],"_revision_number":1},{"id":"7b3ba07e3c46fb45249b12febe017f66a5b9488b","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2023-05-26 19:04:45.000000000","message":"Patch Set 2: Verified+1\n\nBuild of patchset 2 passed: https://buildkite.com/tvl/depot/builds/24726","accounts_in_message":[],"_revision_number":2},{"id":"00f8ce6fda500c2b527ab81cc98726ac1f912aca","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2023-05-26 22:35:33.000000000","message":"Patch Set 2: Code-Review+2\n\nBy voting Code-Review+2 the following files are now code-owner approved by \u003cGERRIT_ACCOUNT_1000001\u003e:\n* tvix/eval/src/builtins/mod.rs\n* tvix/eval/src/tests/tvix_tests/eval-okay-builtins-thunked-function-calls.exp\n* tvix/eval/src/tests/tvix_tests/eval-okay-builtins-thunked-function-calls.nix\n* tvix/eval/src/value/thunk.rs\n","accounts_in_message":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}],"_revision_number":2},{"id":"562622d13956876650b1465ef0ed9b3ba6f57cf6","tag":"autogenerated:gerrit:merged","author":{"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},"date":"2023-05-26 22:35:39.000000000","message":"Change has been successfully rebased and submitted as 3b33c19a9c43cf66c2d28ffa3d49bb6e8757d9b1","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"3b33c19a9c43cf66c2d28ffa3d49bb6e8757d9b1","revisions":{"9bd00d1d00b30ea7a9109e681c9b6c5d9502b3a7":{"kind":"REWORK","_number":1,"created":"2023-05-26 18:59:48.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/51/8651/1","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/51/8651/1","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/51/8651/1"}}},"commit":{"parents":[{"commit":"a4d0a80466016281c3f2b90a1ade66338d258153","subject":"refactor(tvix/store/bin): instantiating TvixStoreIO once","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003da4d0a80466016281c3f2b90a1ade66338d258153"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2023-05-26 18:38:24.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2023-05-26 18:57:10.000000000","tz":120},"subject":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs","message":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs\n\nmapAttrs, map and genList call Nix functions provided by the caller and\nstore the result of applying them in a Nix data structure that does not\nforce all of its contents when forced itself. This means that when such\na builtin application is forced, the Nix function calls performed by the\nbuiltin should not be forced: They may be forced later, but it is also\npossible that they will never be forced, e.g. in\n\n    builtins.length (builtins.map (builtins.add 2) [ 1 2 3 ])\n\nit is not necessary to compute a single application of builtins.add.\n\nSince request_call_with immediately performs the function call\nrequested, Tvix would compute function applications unnecessarily before\nthis change. Because this was not followed by a request_force, the\nimpact of this was relatively low in Nix code (most functions return a\nnew thunk after being applied), but it was enough to cause a lot of\nbogus builtins.trace applications when evaluating anything from\n`lib.modules`. The newly added test includes many cases where Tvix\npreviously incorrectly applied a builtin, breaking a working expression.\n\nTo fix this we add a new helper to construct a Thunk performing a\nfunction application at runtime from a function and argument given as\n`Value`s. This mimics the compiler\u0027s compile_apply(), but does itself\nnot require a compiler, since the necessary Lambda can be constructed\nindependently.\n\nI also looked into other builtins that call a Nix function to verify\nthat they don\u0027t exhibit such a problem:\n\n- Many builtins immediately use the resulting value in a way that makes\n  it necessary to compute all the function calls they do as soon as\n  the outer builtin application is forced:\n\n  * all\n  * any\n  * filter\n  * groupBy\n  * partition\n\n- concatMap needs to (shallowly) force the returned list for\n  concatenation.\n\n- foldl\u0027 is strict in the application of `op` (I added a comment that\n  makes this explicit).\n\n- genericClosure needs to (shallowly) force the resulting list and some\n  keys of the attribute sets inside.\n\nResolves b/272.\n\nChange-Id: I1fa53f744bcffc035da84c1f97ed25d146830446\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d9bd00d1d00b30ea7a9109e681c9b6c5d9502b3a7"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d9bd00d1d00b30ea7a9109e681c9b6c5d9502b3a7"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"a4d0a80466016281c3f2b90a1ade66338d258153","is_merged_in_target_branch":true,"change_id":"I5d9c838f27048726166fa50206d1edd5ed6849b5","change_number":8632,"patch_set_number":6,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"b09b565e8a3ab95040e4a2cacc5917bd400d9f48":{"kind":"REWORK","_number":2,"created":"2023-05-26 19:00:31.000000000","uploader":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"ref":"refs/changes/51/8651/2","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/51/8651/2","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/51/8651/2"}}},"commit":{"parents":[{"commit":"a4d0a80466016281c3f2b90a1ade66338d258153","subject":"refactor(tvix/store/bin): instantiating TvixStoreIO once","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003da4d0a80466016281c3f2b90a1ade66338d258153"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2023-05-26 18:38:24.000000000","tz":120},"committer":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2023-05-26 19:00:28.000000000","tz":120},"subject":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs","message":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs\n\nmapAttrs, map and genList call Nix functions provided by the caller and\nstore the result of applying them in a Nix data structure that does not\nforce all of its contents when forced itself. This means that when such\na builtin application is forced, the Nix function calls performed by the\nbuiltin should not be forced: They may be forced later, but it is also\npossible that they will never be forced, e.g. in\n\n    builtins.length (builtins.map (builtins.add 2) [ 1 2 3 ])\n\nit is not necessary to compute a single application of builtins.add.\n\nSince request_call_with immediately performs the function call\nrequested, Tvix would compute function applications unnecessarily before\nthis change. Because this was not followed by a request_force, the\nimpact of this was relatively low in Nix code (most functions return a\nnew thunk after being applied), but it was enough to cause a lot of\nbogus builtins.trace applications when evaluating anything from\n`lib.modules`. The newly added test includes many cases where Tvix\npreviously incorrectly applied a builtin, breaking a working expression.\n\nTo fix this we add a new helper to construct a Thunk performing a\nfunction application at runtime from a function and argument given as\n`Value`s. This mimics the compiler\u0027s compile_apply(), but does itself\nnot require a compiler, since the necessary Lambda can be constructed\nindependently.\n\nI also looked into other builtins that call a Nix function to verify\nthat they don\u0027t exhibit such a problem:\n\n- Many builtins immediately use the resulting value in a way that makes\n  it necessary to compute all the function calls they do as soon as\n  the outer builtin application is forced:\n\n  * all\n  * any\n  * filter\n  * groupBy\n  * partition\n\n- concatMap needs to (shallowly) force the returned list for\n  concatenation.\n\n- foldl\u0027 is strict in the application of `op` (I added a comment that\n  makes this explicit).\n\n- genericClosure needs to (shallowly) force the resulting list and some\n  keys of the attribute sets inside.\n\nResolves b/272.\n\nChange-Id: I1fa53f744bcffc035da84c1f97ed25d146830446\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db09b565e8a3ab95040e4a2cacc5917bd400d9f48"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db09b565e8a3ab95040e4a2cacc5917bd400d9f48"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"a4d0a80466016281c3f2b90a1ade66338d258153","is_merged_in_target_branch":true,"change_id":"I5d9c838f27048726166fa50206d1edd5ed6849b5","change_number":8632,"patch_set_number":6,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"3b33c19a9c43cf66c2d28ffa3d49bb6e8757d9b1":{"kind":"NO_CODE_CHANGE","_number":3,"created":"2023-05-26 22:35:39.000000000","uploader":{"_account_id":1000015,"name":"clbot","email":"clbot@tvl.fyi","username":"clbot","tags":["SERVICE_USER"]},"ref":"refs/changes/51/8651/3","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/51/8651/3","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/51/8651/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/51/8651/3"}}},"commit":{"parents":[{"commit":"a4d0a80466016281c3f2b90a1ade66338d258153","subject":"refactor(tvix/store/bin): instantiating TvixStoreIO once","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003da4d0a80466016281c3f2b90a1ade66338d258153"}]}],"author":{"name":"sterni","email":"sternenseemann@systemli.org","date":"2023-05-26 18:38:24.000000000","tz":120},"committer":{"name":"clbot","email":"clbot@tvl.fyi","date":"2023-05-26 22:35:39.000000000","tz":0},"subject":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs","message":"fix(tvix): don\u0027t call function eagerly in genList, map \u0026 mapAttrs\n\nmapAttrs, map and genList call Nix functions provided by the caller and\nstore the result of applying them in a Nix data structure that does not\nforce all of its contents when forced itself. This means that when such\na builtin application is forced, the Nix function calls performed by the\nbuiltin should not be forced: They may be forced later, but it is also\npossible that they will never be forced, e.g. in\n\n    builtins.length (builtins.map (builtins.add 2) [ 1 2 3 ])\n\nit is not necessary to compute a single application of builtins.add.\n\nSince request_call_with immediately performs the function call\nrequested, Tvix would compute function applications unnecessarily before\nthis change. Because this was not followed by a request_force, the\nimpact of this was relatively low in Nix code (most functions return a\nnew thunk after being applied), but it was enough to cause a lot of\nbogus builtins.trace applications when evaluating anything from\n`lib.modules`. The newly added test includes many cases where Tvix\npreviously incorrectly applied a builtin, breaking a working expression.\n\nTo fix this we add a new helper to construct a Thunk performing a\nfunction application at runtime from a function and argument given as\n`Value`s. This mimics the compiler\u0027s compile_apply(), but does itself\nnot require a compiler, since the necessary Lambda can be constructed\nindependently.\n\nI also looked into other builtins that call a Nix function to verify\nthat they don\u0027t exhibit such a problem:\n\n- Many builtins immediately use the resulting value in a way that makes\n  it necessary to compute all the function calls they do as soon as\n  the outer builtin application is forced:\n\n  * all\n  * any\n  * filter\n  * groupBy\n  * partition\n\n- concatMap needs to (shallowly) force the returned list for\n  concatenation.\n\n- foldl\u0027 is strict in the application of `op` (I added a comment that\n  makes this explicit).\n\n- genericClosure needs to (shallowly) force the resulting list and some\n  keys of the attribute sets inside.\n\nResolves b/272.\n\nChange-Id: I1fa53f744bcffc035da84c1f97ed25d146830446\nReviewed-on: https://cl.tvl.fyi/c/depot/+/8651\nAutosubmit: sterni \u003csternenseemann@systemli.org\u003e\nTested-by: BuildkiteCI\nReviewed-by: tazjin \u003ctazjin@tvl.su\u003e\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d3b33c19a9c43cf66c2d28ffa3d49bb6e8757d9b1"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d3b33c19a9c43cf66c2d28ffa3d49bb6e8757d9b1"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"a4d0a80466016281c3f2b90a1ade66338d258153","is_merged_in_target_branch":true,"change_id":"I5d9c838f27048726166fa50206d1edd5ed6849b5","change_number":8632,"patch_set_number":6,"change_status":"MERGED"}],"branch":"refs/heads/canon"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~PrologRule","status":"CLOSED","labels":[{"label":"Autosubmit","status":"MAY"},{"label":"Conformant-Commit-Message","status":"OK","applied_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}},{"label":"All-Comments-Resolved","status":"OK","applied_by":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}},{"label":"Verified","status":"OK","applied_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"OK","applied_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}}]},{"rule_name":"Code-Owners","status":"CLOSED"}],"submit_requirements":[{"name":"All-Comments-Resolved","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:All-Comments-Resolved\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:All-Comments-Resolved\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Code-Owners","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"rule:Code-Owners","fulfilled":true,"status":"PASS","passing_atoms":["Code-Owners"],"failing_atoms":[]}},{"name":"Conformant-Commit-Message","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Conformant-Commit-Message\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Conformant-Commit-Message\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dgerrit~PrologRule"],"failing_atoms":[]}}]}
