M Setup.hs
M main/Repl.hs
M src/Nix/Builtins.hs
M src/Nix/Cache.hs
M src/Nix/Cited.hs
M src/Nix/Cited/Basic.hs
M src/Nix/Convert.hs
M src/Nix/Exec.hs
M src/Nix/Expr/Types.hs
M src/Nix/Expr/Types/Annotated.hs
M src/Nix/Lint.hs
M src/Nix/Normal.hs
M src/Nix/Pretty.hs
M src/Nix/Render/Frame.hs
M src/Nix/Scope.hs
M src/Nix/TH.hs
M src/Nix/Thunk.hs
M src/Nix/Thunk/Basic.hs
M src/Nix/Utils.hs
M src/Nix/Value.hs
M src/Nix/Value/Equal.hs
This is demonstrated by the following example, courtesy of Ryan Trinkle:
let x = with x; with { a = 5; }; a; in x
Although the dynamic scopes visible at 'a' happen to be [<thunk: { a = 5; }>,
<thunk: x>], we were forcing each thunk before doing the M.lookup, and then
performing (<|>) on the M.lookup.
Fixes#347