* lib: introduce `foreach` = flip map
The main purpose is to bring attention to `flip map`, which improves
code readablity. It is useful when ad-hoc anonymous function
grows two or more lines in `map` application:
```
map (lcfg:
let port = lcfg.port;
portStr = if port != defaultPort then ":${toString port}" else "";
scheme = if cfg.enableSSL then "https" else "http";
in "${scheme}://cfg.hostName${portStr}"
) (getListen cfg);
```
Compare this to `foreach`-style:
```
foreach (getListen cfg) (lcfg:
let port = lcfg.port;
portStr = if port != defaultPort then ":${toString port}" else "";
scheme = if cfg.enableSSL then "https" else "http";
in "${scheme}://cfg.hostName${portStr}"
);
```
This is similar to Haskell's `for` (http://hackage.haskell.org/package/base-4.12.0.0/docs/Data-Traversable.html#v:for)
* mass replace "flip map -> foreach"
See `foreach`-introduction commit.
```
rg 'flip map ' --files-with-matches | xargs sed -i 's/flip map /foreach /g'
```
* Revert "mass replace "flip map -> foreach""
This reverts commit 3b0534310c.
* mass replace "flip map -> forEach"
See `forEach`-introduction commit.
```
rg 'flip map ' --files-with-matches | xargs sed -i 's/flip map /forEach /g'
```
* rename foreach -> forEach
* and one more place
* add release notes
* tortoisehg: untie from mercurial
When I've added `tortoisehg` package, it turned out that mercurial updates
sometimes broke thg. I've added a comment to `mercurial/default.nix` to
update torotisehg version during mercurial updates, but this worked the other way round:
mercurial stopped to be updated regularly (https://github.com/NixOS/nixpkgs/pull/60993).
And sadly it didn't solve the issue - https://github.com/NixOS/nixpkgs/issues/61759.
Here I'm trying to untie them. Tortoisehg will build a custom mercurial package
if versions don't match. This makes updating tortoisehg more complicated,
but it is still better than current situation.
* expose custom mercurial from thg package
Unfortunately this update will probably still cause the builds from
canary 3 to break and require manual steps to resolve these issues:
https://issuetracker.google.com/issues/136077720#comment9
I.e. manually update the Gradle plugin here (e.g. directly to alpha06):
dependencies {
classpath 'com.android.tools:gradle:3.6.0-alpha03'
}
But as the current status is "Won't Fix (Infeasible)" [0] there's no
point in skipping the updates for the dev/canary channel.
[0]: https://issuetracker.google.com/issues/136077720#comment10