NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
17.43k stars 13.64k forks source link

Fully static Haskell executables - overview issue #43795

Open nh2 opened 6 years ago

nh2 commented 6 years ago

If you just want to build static Haskell executables right now, follow these instructions.

This issue collects/links all issues and ongoing work to make fully-static building of Haskell executables an excellently-working feature in nixpkgs.

I will update here regularly the progress we are making, and sub-goals we encounter on the way that need to be fulfilled to tick off the parent goal.

Obviously contributions to this list are welcome.

Why is static linking desirable?

Static linking means your executable depends on as few things running on the target system as possible.

For Linux, it means that an executable you build will work on any Linux distribution, with essentially infinite forwards-compatibility (because Linux in general does not change its system call interface).

Statically linked executables do not depend on the target system's libc.

Statically linked executable are incredibly easy to deploy (many Go executables are statically linked, which gave them the reputation of being easy to deploy in the devops world).

Statically linked executables can start faster than dynamically linked ones where dynamic linking has to be performed at startup (of course the startup time depends on the number of libraries to link and the amount of symbols contained within).

Statically linked executables are smaller (up to 4x in our mesurements), mostly because GHC's -split-sections has way more effects with them (for unknown reason for now).

Who is working on or contributing to this

Feel free to add yourself!

nh2 commented 6 years ago

Related:

nh2 commented 6 years ago

CC @fosskers from here

nh2 commented 6 years ago

CC @vaibhavsagar whose blog post got me into working on this

puffnfresh commented 6 years ago

I know NixOS is careful about licenses and distribution. I'm thinking about libgmp, which is LGPL:

https://www.gnu.org/licenses/gpl-faq.en.html#LGPLStaticVsDynamic

(1) If you statically link against an LGPL'd library, you must also provide your application in an object (not necessarily source) format, so that a user has the opportunity to modify the library and relink the application.

(2) If you dynamically link against an LGPL'd library already present on the user's computer, you need not convey the library's source. On the other hand, if you yourself convey the executable LGPL'd library along with your application, whether linked with statically or dynamically, you must also convey the library's sources, in one of the ways for which the LGPL provides.

Can we ensure either one of these if we enable caching of static Haskell executables?

Gabriella439 commented 6 years ago

@puffnfresh: Or you could use a version of GHC with simple-integer to avoid the GMP dependency

puffnfresh commented 6 years ago

@Gabriel439 yeah, is that what we'll do for redistributing static Haskell executables?

vaibhavsagar commented 6 years ago

This is great, thanks so much for working on this and creating this issue @nh2!

dezgeg commented 6 years ago

Before doing more of this https://github.com/NixOS/nixpkgs/pull/43524 -style fixing of individual package builds, could someone give a try of https://github.com/endrazine/wcc (which has been packaged in https://github.com/NixOS/nixpkgs/pull/43014) in converting shared objects to static objects?

nh2 commented 6 years ago

@puffnfresh Every Haskell package already has a license field (upstream and it's available as a field in nixpkgs).

The best solution seems to be to traverse the licenses of all things linked and ensure that Hydra does not build statically linked exes where one of the dependencies is LGPL or stronger (unless the final project itself is also LGPL or stronger anyway).

For executables blocked that way, a fallback should happen where it's checked if the issue goes away if integer-simple was used instead; then Hydra can build it that way.

nh2 commented 6 years ago

Before doing more of this #43524 -style fixing of individual package builds, could someone give a try of https://github.com/endrazine/wcc (which has been packaged in #43014) in converting shared objects to static objects?

@dezgeg It sounds interesting and may be worth a try but there may be the independent questions whether I want "binary black magic" (as wcc calls it) in my production binaries.

Nix is already pretty custom in its build process, I wouldn't want an upstream library author reject my bug report about a segfault with "well you use totally custom tools, if you just used our normally built static libs we would be more eager to look into that". It's a good feature if nix's builds still essentially are a series of "normal" build steps (compiler and linker invocations).

I haven't looked into wcc in detail so I cannot judge its safety, but my intuition tells me I'd rather sponsor Hydra some build servers and HDs than turn dynamic libs into static ones and have the risk of unexpected behaviour.

jgm commented 6 years ago

We already provide fully static builds of pandoc with each release, using docker and alpine. The build process can be found in the linux/ directory in pandoc's repository.

fosskers commented 6 years ago

Thank you for CCing me into this. Could Aura be added to the list of projects above? I haven't yet been able to decipher the instructions for testing it myself, apologies.

domenkozar commented 6 years ago

I just want to thank you @nh2 this is excellent work :)

nh2 commented 6 years ago

@fosskers Does aura have a nix derivation in hackage-packages that I could use as a base?

Currently most executables I'm trying are already in nixpkgs and then I just override them with statify function to build statically.

I haven't yet been able to decipher the instructions for testing it myself, apologies.

Conceptually very simple, for example for dhall I just added 1 line here:

https://github.com/nh2/static-haskell-nix/blob/ef283274ce193f713082591dd462f4bd3fb4dd1f/survey/default.nix#L98

and then built with

NIX_PATH=nixpkgs=https://github.com/nh2/nixpkgs/archive/925aac04f4ca58aceb83beef18cb7dae0715421b.tar.gz nix-build --no-link survey/default.nix -A working

For some packages it works immediately, for others I have to make some small overrides of their dependencies (see a bit further up in the file), usually to give static libraries for system dependencies.

infinisil commented 6 years ago

Having discussed it on IRC, here's a way of building all Haskell executables: https://gist.github.com/Infinisil/3bdb01689b5f84b71f8538f467159692

Just nix-build that file. This includes broken packages by default, because if you want to see which new packages your change breaks, you need to know which ones were broken already (so you should build this once before your change and once after, then compare).

nh2 commented 6 years ago

Having discussed it on IRC, here's a way of building all Haskell executables

I have incorporated (a large part of) that into https://github.com/nh2/static-haskell-nix/blob/09d0eaa605111ea516dfaa0e7341a71ff1a63042/survey/default.nix#L47-L124 now.

So now we can build survey/default.nix -A allStackageExecutables and see (with --keep-going) how many of those build.

If some binary doesn't build because of dependent libraries making problems, those libraries are supposed to be patched here.

Contributors are welcome to help make as many of those build as possible.

fosskers commented 6 years ago

@nh2 Aura isn't yet connected to Nix infrastructure in any way. I suppose I'll pull up my old notes about getting a project set up with Nix and try to build Aura that way at first.

dezgeg commented 6 years ago

It sounds interesting and may be worth a try but there may be the independent questions whether I want "binary black magic" (as wcc calls it) in my production binaries.

Nix is already pretty custom in its build process, I wouldn't want an upstream library author reject my bug report about a segfault with "well you use totally custom tools, if you just used our normally built static libs we would be more eager to look into that". It's a good feature if nix's builds still essentially are a series of "normal" build steps (compiler and linker invocations).

I understand the concern, yes.

my intuition tells me I'd rather sponsor Hydra some build servers and HDs than turn dynamic libs into static ones and have the risk of unexpected behaviour.

The problem isn't the disk space or resource usage but rather the effort of fixing packages one-by-one to support static linking and the cost of maintaining that. But maybe Haskell packages don't use too many native dependencies.

nh2 commented 6 years ago

I have given a first run at building all executables on Stackage, statically.

https://github.com/nh2/static-haskell-nix/blob/09d0eaa605111ea516dfaa0e7341a71ff1a63042/survey/default.nix#L257-L259

See this post for full build outputs.

It took around 3 hours to get there (I built with 5 machines).

The final status line, [2/961/963 built (49 failed), 4245 copied (19215.1 MiB), 210.7 MiB DL] already gives us some information on the success.

The program didn't terminate; right now it's

Insights:

nh2 commented 6 years ago

But maybe Haskell packages don't use too many native dependencies.

@dezgeg Yes, I think that is accurate.

From what I posted a just above, it looks like most of Stackage's executables will be buildable as long as a set of 15 native libs (13 above and sqlite and lzma which I already have done) are overridden with static support.

matthewbauer commented 6 years ago

Great work!

My rule of thumb for static vs shared is:

We pretty much need to support both in Nixpkgs. I can see some of the benefits of always building statically but I think the advantages to shared linking is much greater.

nh2 commented 6 years ago

I've found and PRd a fix for another cabal issue that needs to be merged to make static linking reasonable:

https://github.com/haskell/cabal/pull/5451

This passes --ld-option through to GHC so that we can specify extra options in configureFlags that are needed only for static linking.

I've also added it to the overview in the issue description.

nh2 commented 6 years ago

My rule of thumb for static vs shared is:

If you're targeting something outside of a Nix store - build static
If you're targeting inside of a Nix store - build shared

This makes sense.

We pretty much need to support both in Nixpkgs

Yes. One of my goals is that nixpkgs becomes the building environment which makes it really easy to build any program so that it works on any Linux distribution, forever.

Other Linux distributions make it really hard to build things statically.

I can see some of the benefits of always building statically but I think the advantages to shared linking is much greater.

I guess I agree in general but there are some exceptions / other points, like

I'd find it very cool if somebody could build a typical NixOS with only static exes and compare what the size difference (and perhaps resident memory difference) is.

nh2 commented 6 years ago

Update:

nh2 commented 6 years ago

Update:

domenkozar commented 6 years ago

I've played with this a bit and here are sizes for cachix:

And using UPX:

Seems like using UPX and not (re?)compressing is the best way to go for distributing static execs :)

Gabriella439 commented 6 years ago

@domenkozar: What's the difference in startup times?

jgm commented 6 years ago

Niklas Hambüchen notifications@github.com writes:

Update:

  * [x] `pandoc` (CC @jgm)
      * [working](https://github.com/nh2/static-haskell-nix/blob/master/survey/default.nix#L335) but this [`hslua` test case segfault](https://github.com/hslua/hslua/issues/67) might mean some functionality will crash

Another known limitation with the statically compiled pandoc is that lua filters it runs can't load binary lua modules (e.g. lpeg.so).

domenkozar commented 6 years ago

@Gabriel439

$ bench './cachix --version'
benchmarking ./cachix --version
time                 52.99 ms   (49.53 ms .. 56.51 ms)
                     0.982 R²   (0.954 R² .. 0.996 R²)
mean                 51.37 ms   (49.28 ms .. 53.97 ms)
std dev              4.183 ms   (3.210 ms .. 5.326 ms)
variance introduced by outliers: 29% (moderately inflated)

$ bench './cachix-upx --version'
benchmarking ./cachix-upx --version
time                 88.26 ms   (82.51 ms .. 92.93 ms)
                     0.996 R²   (0.989 R² .. 0.999 R²)
mean                 93.80 ms   (91.46 ms .. 98.58 ms)
std dev              5.019 ms   (2.032 ms .. 8.197 ms)
variance introduced by outliers: 10% (moderately inflated)
nh2 commented 6 years ago

I have further reduced the number of build errors as of https://github.com/nh2/static-haskell-nix/commit/7e41d26eb7403806d6be5f7046efcea3b05442ab.

I also added functionality to inform nix Haskell packages to dontCheck when Stackage says that the test is known to spuriously fail.

Statistics

By specifying some more dependencies, the remaining failures can probably be removed. But I think this is good enough for now.

Summary of compiling as many Stackage executables as possible

This approach works.

There is a very high chance you can link any Haskell executable you want statically with this tooling.

And it is easy. At worst you have to pass a couple linker flags for your final link (example), and perhaps we can automate that away entirely with pkg-config.

I consider this a success.

Getting started with linking your programs statically

To link your exe statically, the simplest way to get started is to add it to survey/default.nix, get it to build, and then perhaps strip away everything you don't need (as the file is, well, a survey of all the packages and contains more than you need).

There are a couple upstream fixes I had to make to get this far but I expect those to be merged soon so the file will shrink significantly.

nh2 commented 6 years ago

Binary-reproducible builds

I was interested in whether the produced binaries are byte-reproducible across builds.

Wth a miniscule modification to build non-parallelly because GHC current isn't deterministic when building in parallel:

      dhall = appendConfigureFlag super.dhall "--ghc-option=-j1";

Using Nix's --check functionality that tests that:

$ NIX_PATH=nixpkgs=https://github.com/nh2/nixpkgs/archive/50677e46.tar.gz nix-build survey/default.nix -A haskellPackages.dhall
/nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1

$ nix-store --realise --check $(NIX_PATH=nixpkgs=https://github.com/nh2/nixpkgs/archive/50677e46.tar.gz nix-instantiate survey/default.nix -A haskellPackages.dhall) -K
...
note: keeping build directory '/tmp/nix-build-dhall-1.15.1.drv-1'
error: derivation '/nix/store/005xjwn36wy3lv04rs0bqazr70hmkpjd-dhall-1.15.1.drv' may not be deterministic: output '/nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1' differs from '/nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1.check'

CC @Gabriel439

Nondeterministic .hi files but ...

diff -u <(/nix/store/hfi080vzqqzfip6bd6x4cxc2jgj56xn3-ghc-8.4.3/lib/ghc-8.4.3/bin/ghc -B/nix/store/hfi080vzqqzfip6bd6x4cxc2jgj56xn3-ghc-8.4.3/lib/ghc-8.4.3 --show-iface /nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1/ghc-8.4.3/dhall-1.15.1/Dhall/Main.dyn_hi) <(/nix/store/hfi080vzqqzfip6bd6x4cxc2jgj56xn3-ghc-8.4.3/lib/ghc-8.4.3/bin/ghc -B/nix/store/hfi080vzqqzfip6bd6x4cxc2jgj56xn3-ghc-8.4.3/lib/ghc-8.4.3 --show-iface /nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1.check/ghc-8.4.3/dhall-1.15.1/Dhall/Main.dyn_hi)

--- /proc/self/fd/11    2018-07-22 20:49:24.335131983 +0200
+++ /proc/self/fd/13    2018-07-22 20:49:24.335131983 +0200
@@ -5,7 +5,7 @@
 Way: Wanted [],
      got    [d, y, n]
 interface Dhall.Main 8043
-  interface hash: 0a05064b054e655b52f1017487829234
+  interface hash: c1f16b2ba4b2cfc8a9e78ef9bd952e61
   ABI hash: 415f06e049531325866e9ad64e625758
   export-list hash: 11282f31ed241c062825f667c7342544
   orphan hash: ced52be674fb2cac8ebaf6fe6391f669
@@ -223,7 +223,7 @@
   TypeError df38e2333b1a033fa152979879d95590
   X e963e1c8e00353569b8d10b0b8014dd8
   typeOf 3ada20aba4eb03cf4e83458e9e74865e
-import  -/  Paths_dhall f274db0756d0d9c06011b6b2909c416a
+import  -/  Paths_dhall 1840d1baae0db0a2a6b8788056d462a6
   exports: 1dc0dfdfd07302caa8953ea30539b0b6
   version 0911ed4004691170ff7c1c42f11d0fb7
 import  -/  GHC.Classes 122abfcd7450c6c11602933c9ca5f80d

So there's a little bit of work to do to ensure that this one Paths_dhall import is reproducible across builds.

The other bit (interface hash) actually depends on that and will be right automatically as soon as we fix Paths_dhall.

Deterministic binaries!

Despite the .hi files being minimally different, the final binary is byte-identical:

% sha256sum /nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1/bin/dhall /nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1.check/bin/dhall
970dc00e0711a89c8c52c889e62743e084625ce66476300a6ad83a8f08ee6827  /nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1/bin/dhall
970dc00e0711a89c8c52c889e62743e084625ce66476300a6ad83a8f08ee6827  /nix/store/69879zd79xxfm0p04fkvz1sdk5rjkda3-dhall-1.15.1.check/bin/dhall

Note here I built only dhall repeatedly , not all of its dependencies; that would be another task with more chance for things being different. Maybe somebody else can try that!

Gabriella439 commented 6 years ago

@nh2: In can confirm that in my CI build (which is derived from your code), I have justStaticExecutables set and once you do that then the build passes --check (since it doesn't generate any library code or interface files):

$ nix-store --realise --check /nix/store/vr213i033l681p4is3c2l3729kacwfsf-dhall-1.16.1.drv
...
warning: rewriting hashes in '/nix/store/vhdpfa4dmi4n9j8pqfz61n1lrr7wcv62-dhall-1.16.1'; cross fingers
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
/nix/store/vhdpfa4dmi4n9j8pqfz61n1lrr7wcv62-dhall-1.16.1
$ nix-store --realise --check /nix/store/s33rwklhbilijccdzgq9i5gbr60y0j1w-dhall-json-1.2.2.drv
...
warning: rewriting hashes in '/nix/store/h79vgw9d9dn4m3jicbnhs96gm90hhsdd-dhall-json-1.2.2'; cross fingers
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
/nix/store/h79vgw9d9dn4m3jicbnhs96gm90hhsdd-dhall-json-1.2.2

Relevant code here in case anybody wants to reproduce on their end:

nh2 commented 6 years ago

For the record, here is some evidence that fully dynamic linking of Haskell library dependencies is not a good idea (nixpkgs already doesn't do this any more by default):

ldd /nix/store/6rdybwykb7lj9f6451hz7n54pijhhfdc-stack-1.8.0/bin/stack

Output:

``` linux-vdso.so.1 => (0x00007ffec67fa000) libm.so.6 => /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/libm.so.6 (0x00007f92c420a000) libHSstack-1.7.1-2gWYI0FJH9o7sERge2EcKB-ghc8.2.2.so => /nix/store/6rdybwykb7lj9f6451hz7n54pijhhfdc-stack-1.8.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSstack-1.7.1-2gWYI0FJH9o7sERge2EcKB-ghc8.2.2.so (0x00007f92c2cb0000) libHSzip-archive-0.3.2.4-FdFwt0PYy1HAEthSXdF0Rs-ghc8.2.2.so => /nix/store/nshqcs9xpkx21gfcaiiqn960g8cwcs65-zip-archive-0.3.2.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSzip-archive-0.3.2.4-FdFwt0PYy1HAEthSXdF0Rs-ghc8.2.2.so (0x00007f92c2a56000) libHSdigest-0.0.1.2-J7cjlUazOWnIwNGrU2CIF8-ghc8.2.2.so => /nix/store/hc0wrc5ab4lpiqnvqj81z2rw1kiilkkd-digest-0.0.1.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSdigest-0.0.1.2-J7cjlUazOWnIwNGrU2CIF8-ghc8.2.2.so (0x00007f92c284e000) libHSunicode-transforms-0.3.4-KDVMSCN6wRf7O2i4VXlh5z-ghc8.2.2.so => /nix/store/ay8c4c4ph685qcc827xcjmnbkg60pzyy-unicode-transforms-0.3.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSunicode-transforms-0.3.4-KDVMSCN6wRf7O2i4VXlh5z-ghc8.2.2.so (0x00007f92c20e6000) libHSbitarray-0.0.1.1-7aLvtv6Zt0Q3riGztsfTFs-ghc8.2.2.so => /nix/store/6q2xp122hy2b9a8zm2wa0slhqv11hm99-bitarray-0.0.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbitarray-0.0.1.1-7aLvtv6Zt0Q3riGztsfTFs-ghc8.2.2.so (0x00007f92c1ec7000) libHStext-metrics-0.3.0-4ADAY9C4NfO4dqUSWPxaMJ-ghc8.2.2.so => /nix/store/x7jpq9rc6gqq161lmd6fj46ibm1lmbcv-text-metrics-0.3.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStext-metrics-0.3.0-4ADAY9C4NfO4dqUSWPxaMJ-ghc8.2.2.so (0x00007f92c1ca2000) libHSstore-0.4.3.2-7xUz7tW2JnLCS49aAWzyi7-ghc8.2.2.so => /nix/store/73kh11mp82b9y39qlzi6br09wlksxnsq-store-0.4.3.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSstore-0.4.3.2-7xUz7tW2JnLCS49aAWzyi7-ghc8.2.2.so (0x00007f92c1842000) libHSfree-5.0.1-7R63NomDjpdFVBoVXmXfU6-ghc8.2.2.so => /nix/store/23ssh21n0jp1f70ajy82xixlv4kdqmkk-free-5.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSfree-5.0.1-7R63NomDjpdFVBoVXmXfU6-ghc8.2.2.so (0x00007f92c149f000) libHSvoid-0.7.2-BaCvWtelk6X2yBHg8R7RQm-ghc8.2.2.so => /nix/store/b0vgz0g0wfywjlpphbnb7ab7wfngx2iq-void-0.7.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSvoid-0.7.2-BaCvWtelk6X2yBHg8R7RQm-ghc8.2.2.so (0x00007f92c129c000) libHShspec-smallcheck-0.5.0-8YzaGQWrP8S7coBZR2mHPw-ghc8.2.2.so => /nix/store/0c03dq2xy6diliyz17ybmir2p300znv6-hspec-smallcheck-0.5.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShspec-smallcheck-0.5.0-8YzaGQWrP8S7coBZR2mHPw-ghc8.2.2.so (0x00007f92c1085000) libHSsmallcheck-1.1.3.1-CBUzkGh2qJwLP1YqH7XH7y-ghc8.2.2.so => /nix/store/v7kkb80sjykh9hclsmfkfqmgi0snnmly-smallcheck-1.1.3.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsmallcheck-1.1.3.1-CBUzkGh2qJwLP1YqH7XH7y-ghc8.2.2.so (0x00007f92c0e2a000) libHSlogict-0.6.0.2-5lxUMo7vnTpCrEyOKX3WTG-ghc8.2.2.so => /nix/store/vzs5l2vsg12xyxjbm4i62slknvkg47a3-logict-0.6.0.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSlogict-0.6.0.2-5lxUMo7vnTpCrEyOKX3WTG-ghc8.2.2.so (0x00007f92c0c09000) libHShspec-2.4.8-8S5J29axVCKHbj3wvjgswz-ghc8.2.2.so => /nix/store/9kxxwgigk2r7ss23qbm9kvr9srr2ig1b-hspec-2.4.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShspec-2.4.8-8S5J29axVCKHbj3wvjgswz-ghc8.2.2.so (0x00007f92c09f4000) libHShspec-discover-2.4.8-LTGHxW3iGukBkZGh8Wfshc-ghc8.2.2.so => /nix/store/kynkfi6vs753gad6hayppi9mma8yhw2k-hspec-discover-2.4.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShspec-discover-2.4.8-LTGHxW3iGukBkZGh8Wfshc-ghc8.2.2.so (0x00007f92c07d2000) libHShspec-core-2.4.8-BJQNovLLXFd6KxFEgy2dQF-ghc8.2.2.so => /nix/store/gmvmnqx8h8c40sdd47ny3bqhsb24mhb4-hspec-core-2.4.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShspec-core-2.4.8-BJQNovLLXFd6KxFEgy2dQF-ghc8.2.2.so (0x00007f92c04d4000) libHSsetenv-0.1.1.3-4FEJPUU51wbJmlhCSZScDf-ghc8.2.2.so => /nix/store/l1yrlkf3kjbi6sd3hmwsbb7fag3q1d4p-setenv-0.1.1.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsetenv-0.1.1.3-4FEJPUU51wbJmlhCSZScDf-ghc8.2.2.so (0x00007f92c02d1000) libHSquickcheck-io-0.2.0-7UgsC7t0mA24u70xSNYJWt-ghc8.2.2.so => /nix/store/dh9rxgr3z9v7mklm892693dhabqqqgw5-quickcheck-io-0.2.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSquickcheck-io-0.2.0-7UgsC7t0mA24u70xSNYJWt-ghc8.2.2.so (0x00007f92c00c7000) libHShspec-expectations-0.8.2-u0Nf5sZGE0ADGpjIcTPpI-ghc8.2.2.so => /nix/store/y38qipy9rfmpxd95i1di6b0nwl7vc7dw-hspec-expectations-0.8.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShspec-expectations-0.8.2-u0Nf5sZGE0ADGpjIcTPpI-ghc8.2.2.so (0x00007f92bfeb0000) libHSQuickCheck-2.10.1-4Os66uOJMCzBKiZgTbIvyk-ghc8.2.2.so => /nix/store/hn6870i2rdzdc0qbbfv7m0b9v39yvw55-QuickCheck-2.10.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSQuickCheck-2.10.1-4Os66uOJMCzBKiZgTbIvyk-ghc8.2.2.so (0x00007f92bfb0b000) libHStf-random-0.5-H0EZh6X3duX25gCCL9n0I3-ghc8.2.2.so => /nix/store/kaq9d2kj01p8pjx3xl9rnbajdpqdsg3l-tf-random-0.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStf-random-0.5-H0EZh6X3duX25gCCL9n0I3-ghc8.2.2.so (0x00007f92bf8db000) libHSHUnit-1.6.0.0-Co0VFs8PjIYJtvd3iwPPg-ghc8.2.2.so => /nix/store/65bayxf23bh67znigfd6rnkkpvr3r4gl-HUnit-1.6.0.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSHUnit-1.6.0.0-Co0VFs8PjIYJtvd3iwPPg-ghc8.2.2.so (0x00007f92bf6a0000) libHScall-stack-0.1.0-BVjoAlBRe9FCSr5eFfllei-ghc8.2.2.so => /nix/store/bl2011a4hg9zdikrdv7p9faxbshvkzfg-call-stack-0.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScall-stack-0.1.0-BVjoAlBRe9FCSr5eFfllei-ghc8.2.2.so (0x00007f92bf497000) libHScryptohash-0.11.9-BY4JKly1wxP2CqIOUXppDu-ghc8.2.2.so => /nix/store/v9frz3zqrj0dnkcr2bpbjhxddhwm8c1g-cryptohash-0.11.9/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScryptohash-0.11.9-BY4JKly1wxP2CqIOUXppDu-ghc8.2.2.so (0x00007f92bf247000) libHSth-utilities-0.2.0.1-L7RxYUzINtk4Uz1j00o9Zl-ghc8.2.2.so => /nix/store/lpsgphrwcn998lhcyi5hz7g2qwqaa9sa-th-utilities-0.2.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-utilities-0.2.0.1-L7RxYUzINtk4Uz1j00o9Zl-ghc8.2.2.so (0x00007f92befb9000) libHSth-orphans-0.13.5-Cu4ENUXvdJ830lLxtqlpxL-ghc8.2.2.so => /nix/store/5ggl64whm8gdcw8cvd17wfqy4r7rhcg6-th-orphans-0.13.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-orphans-0.13.5-Cu4ENUXvdJ830lLxtqlpxL-ghc8.2.2.so (0x00007f92bed64000) libHSth-reify-many-0.1.8-55sJUBTewKS5EsM9w7rxqR-ghc8.2.2.so => /nix/store/7nzk6ss1ykvs6q6n8mmy2zf5lrya1apk-th-reify-many-0.1.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-reify-many-0.1.8-55sJUBTewKS5EsM9w7rxqR-ghc8.2.2.so (0x00007f92beb54000) libHSth-expand-syns-0.4.4.0-3kFGYL0IHLbFlT4ybVKmjP-ghc8.2.2.so => /nix/store/xdaybr5xfgngx7r5cln4630p36yfhisc-th-expand-syns-0.4.4.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-expand-syns-0.4.4.0-3kFGYL0IHLbFlT4ybVKmjP-ghc8.2.2.so (0x00007f92be939000) libHSsafe-0.3.17-CBj05uAzpTx4SAsFxDnCju-ghc8.2.2.so => /nix/store/1rxy268swczayb7js7qhhcwd7kdzw1hq-safe-0.3.17/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsafe-0.3.17-CBj05uAzpTx4SAsFxDnCju-ghc8.2.2.so (0x00007f92be70e000) libHSsyb-0.7-3Lq8MQxmYP07qktjI1jxu0-ghc8.2.2.so => /nix/store/jhvsdzyc9ni38rqq1ikk3pwx7g16afw4-syb-0.7/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsyb-0.7-3Lq8MQxmYP07qktjI1jxu0-ghc8.2.2.so (0x00007f92be4cd000) libHSstore-core-0.4.1-2X7N4wRQWg4IlYP5w156OA-ghc8.2.2.so => /nix/store/qna8fh7l25mmryg5cg0sjh7sf1vp6a97-store-core-0.4.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSstore-core-0.4.1-2X7N4wRQWg4IlYP5w156OA-ghc8.2.2.so (0x00007f92be2ab000) libHSrio-0.1.1.0-FexoooRW7ob5n3KUdsUk6-ghc8.2.2.so => /nix/store/km9jvpxh225kjz9nhx0ds53s53h38cjs-rio-0.1.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSrio-0.1.1.0-FexoooRW7ob5n3KUdsUk6-ghc8.2.2.so (0x00007f92be02d000) libHSunliftio-0.2.6.0-EKibt1UMTrSE6o0QbQiOHu-ghc8.2.2.so => /nix/store/369dia7mhq874hhy3hrnzj35lgp25hsh-unliftio-0.2.6.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSunliftio-0.2.6.0-EKibt1UMTrSE6o0QbQiOHu-ghc8.2.2.so (0x00007f92bddcb000) libHSretry-0.7.6.2-DmvPlcrsNk172eKSCRSV5h-ghc8.2.2.so => /nix/store/7ydbs1fpxh4cd380qr2hpa6cvxkcd73w-retry-0.7.6.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSretry-0.7.6.2-DmvPlcrsNk172eKSCRSV5h-ghc8.2.2.so (0x00007f92bdbb2000) libHSregex-applicative-text-0.1.0.1-ATLSLqSwNzDJQsTlSN9tMh-ghc8.2.2.so => /nix/store/cc8vc8yfi8k7f95nvpl54kymmr5ip0av-regex-applicative-text-0.1.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSregex-applicative-text-0.1.0.1-ATLSLqSwNzDJQsTlSN9tMh-ghc8.2.2.so (0x00007f92bd9a4000) libHSregex-applicative-0.3.3-DxcXiGFOKNJAEyOISHX5JB-ghc8.2.2.so => /nix/store/zmd13l3w58ic093l39gyb3c9w4zg8bm0-regex-applicative-0.3.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSregex-applicative-0.3.3-DxcXiGFOKNJAEyOISHX5JB-ghc8.2.2.so (0x00007f92bd765000) libHSproject-template-0.2.0.1-BOlIfJUOc5R2n7Khq0Phcp-ghc8.2.2.so => /nix/store/wdl9171865mxixpi34c07rarfl2p68b4-project-template-0.2.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSproject-template-0.2.0.1-BOlIfJUOc5R2n7Khq0Phcp-ghc8.2.2.so (0x00007f92bd54f000) libHSpersistent-template-2.5.4-Bl8oKKDMx4qta8cRpmMeZ-ghc8.2.2.so => /nix/store/bbcvmfdjg7kd8ncrcv0493air3df5c2c-persistent-template-2.5.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpersistent-template-2.5.4-Bl8oKKDMx4qta8cRpmMeZ-ghc8.2.2.so (0x00007f92bd293000) libHSaeson-compat-0.3.7.1-CaUr7Ii1233A8QbtPOQHX8-ghc8.2.2.so => /nix/store/z5dak70x211w4vyhy6gfmhmfznwq3b7a-aeson-compat-0.3.7.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSaeson-compat-0.3.7.1-CaUr7Ii1233A8QbtPOQHX8-ghc8.2.2.so (0x00007f92bd086000) libHSpersistent-sqlite-2.6.4-6DAC8mUTLBr9FnsV7RMxVj-ghc8.2.2.so => /nix/store/h7fc71ws8iqsw0ps4g8w6xkrk8w3b08x-persistent-sqlite-2.6.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpersistent-sqlite-2.6.4-6DAC8mUTLBr9FnsV7RMxVj-ghc8.2.2.so (0x00007f92bcd66000) libHSmicrolens-th-0.4.1.3-6LAZtQeO94f7iOXPbztt82-ghc8.2.2.so => /nix/store/lg38lrbvxqg57z7hvh4ba2y9s7r1sk8s-microlens-th-0.4.1.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmicrolens-th-0.4.1.3-6LAZtQeO94f7iOXPbztt82-ghc8.2.2.so (0x00007f92bcb2c000) libHSpersistent-2.7.1-FL1w4E2wDnW7IDignteXWq-ghc8.2.2.so => /nix/store/510zcq0hxvghc69gyljblcqfpg80682l-persistent-2.7.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpersistent-2.7.1-FL1w4E2wDnW7IDignteXWq-ghc8.2.2.so (0x00007f92bc664000) libHSsilently-1.2.5-A7WEXUoXcTh1TcbS3dokt3-ghc8.2.2.so => /nix/store/w1brkwz7321racgpvjj76a8fx5g9nkb7-silently-1.2.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsilently-1.2.5-A7WEXUoXcTh1TcbS3dokt3-ghc8.2.2.so (0x00007f92bc45c000) libHSblaze-html-0.9.0.1-30u0zCYbMU88cZzP2vR7Xe-ghc8.2.2.so => /nix/store/d93zl0b468sv7kl564a61qylx0hk2myz-blaze-html-0.9.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSblaze-html-0.9.0.1-30u0zCYbMU88cZzP2vR7Xe-ghc8.2.2.so (0x00007f92bbfd7000) libHSblaze-markup-0.8.2.1-Hzh5O1zkNQXFdlbzYJG7gN-ghc8.2.2.so => /nix/store/vdhz5fyamd95gfv29sb54ri9ijnd37sg-blaze-markup-0.8.2.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSblaze-markup-0.8.2.1-Hzh5O1zkNQXFdlbzYJG7gN-ghc8.2.2.so (0x00007f92bbd7c000) libHShttp-api-data-0.3.8.1-L9NaFga84DM8y2FFoTXpcn-ghc8.2.2.so => /nix/store/l4aw911cpr0pj51garchbwla3jhp2hr9-http-api-data-0.3.8.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShttp-api-data-0.3.8.1-L9NaFga84DM8y2FFoTXpcn-ghc8.2.2.so (0x00007f92bba74000) libHSuri-bytestring-0.3.1.1-BshzYcxZNliKSoRrUyi5Hp-ghc8.2.2.so => /nix/store/xsbjlnfbyyv687vnqr733yil5g1dszgp-uri-bytestring-0.3.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSuri-bytestring-0.3.1.1-BshzYcxZNliKSoRrUyi5Hp-ghc8.2.2.so (0x00007f92bb7de000) libHSth-lift-instances-0.1.11-3QSETW1HVEC6KijjhafwlK-ghc8.2.2.so => /nix/store/89h5w94ymli0ahdq4b8v8r31xpmqv6h0-th-lift-instances-0.1.11/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-lift-instances-0.1.11-3QSETW1HVEC6KijjhafwlK-ghc8.2.2.so (0x00007f92bb5d1000) libHSattoparsec-iso8601-1.0.0.0-31RRIfFCH2a5UlqWk1ikUR-ghc8.2.2.so => /nix/store/dpk5k3ifaxckl7b1x2kb7mzgwnyc401f-attoparsec-iso8601-1.0.0.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSattoparsec-iso8601-1.0.0.0-31RRIfFCH2a5UlqWk1ikUR-ghc8.2.2.so (0x00007f92bb3ba000) libHSpath-pieces-0.2.1-AymIRthsKPdHC7bxgvM8Tm-ghc8.2.2.so => /nix/store/x2i0l80byrqaf72sdhq4ci2l789hzw2s-path-pieces-0.2.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpath-pieces-0.2.1-AymIRthsKPdHC7bxgvM8Tm-ghc8.2.2.so (0x00007f92bb19e000) libHSresource-pool-0.2.3.2-JBPHcfnCdfz6Jk5qFoFNcl-ghc8.2.2.so => /nix/store/drz3kx0ch8fngf0hrddgx1s79al74brl-resource-pool-0.2.3.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSresource-pool-0.2.3.2-JBPHcfnCdfz6Jk5qFoFNcl-ghc8.2.2.so (0x00007f92baf8b000) libHSpath-io-1.3.3-3DDNMkTgM751LobQEk0FpL-ghc8.2.2.so => /nix/store/jnw2dd0ndcrm9ydchb2f2gzp2m1060cn-path-io-1.3.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpath-io-1.3.3-3DDNMkTgM751LobQEk0FpL-ghc8.2.2.so (0x00007f92bad65000) libHStemporary-1.2.1.1-468ctV5wSju4LIYhvyQeLr-ghc8.2.2.so => /nix/store/0qdbn6kpx2rlw5g7aid3ihvch8miiccx-temporary-1.2.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStemporary-1.2.1.1-468ctV5wSju4LIYhvyQeLr-ghc8.2.2.so (0x00007f92bab5e000) libHSpath-0.6.1-5PT9yGxwHwEjvjEyOUVsR-ghc8.2.2.so => /nix/store/0rclzj2fqdind357562kbyxrqgyf9nip-path-0.6.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpath-0.6.1-5PT9yGxwHwEjvjEyOUVsR-ghc8.2.2.so (0x00007f92ba93a000) libHSoptparse-simple-0.1.0-AaGBDmEEROsLkJ3VysDz2f-ghc8.2.2.so => /nix/store/ky35yx4c740iwwymgshjj78mpdn34d8a-optparse-simple-0.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSoptparse-simple-0.1.0-AaGBDmEEROsLkJ3VysDz2f-ghc8.2.2.so (0x00007f92ba725000) libHSoptparse-applicative-0.14.2.0-7h0T7ONTR6AFGPMJCLb5iD-ghc8.2.2.so => /nix/store/2h9i3bnpxcnq8lmhkn44nd864wcwdngy-optparse-applicative-0.14.2.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSoptparse-applicative-0.14.2.0-7h0T7ONTR6AFGPMJCLb5iD-ghc8.2.2.so (0x00007f92ba45d000) libHSansi-wl-pprint-0.6.8.2-AFBJQxTmzbt6P0JlYhXs8j-ghc8.2.2.so => /nix/store/kmlxz21r08hgybg5agyhbiga3mc0akaz-ansi-wl-pprint-0.6.8.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSansi-wl-pprint-0.6.8.2-AFBJQxTmzbt6P0JlYhXs8j-ghc8.2.2.so (0x00007f92ba22d000) libHSopen-browser-0.2.1.0-IlmBbUU5IZGH2cVeTpoTFu-ghc8.2.2.so => /nix/store/6w5k58bd6pgkksb3p0a12clz6jjxnwmg-open-browser-0.2.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSopen-browser-0.2.1.0-IlmBbUU5IZGH2cVeTpoTFu-ghc8.2.2.so (0x00007f92ba027000) libHSneat-interpolation-0.3.2.1-OQozkQmXsF6wP4flt2Qbg-ghc8.2.2.so => /nix/store/4lqjgvfwdmz7p9cbwcfxx79xfh981g12-neat-interpolation-0.3.2.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSneat-interpolation-0.3.2.1-OQozkQmXsF6wP4flt2Qbg-ghc8.2.2.so (0x00007f92b9e0e000) libHSbase-prelude-1.2.0.1-Jp4fn0lH8rP2DHoIPVF2qm-ghc8.2.2.so => /nix/store/4w23bqg27isdgxxv8z3df1gai2rgq96p-base-prelude-1.2.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbase-prelude-1.2.0.1-Jp4fn0lH8rP2DHoIPVF2qm-ghc8.2.2.so (0x00007f92b9c0c000) libHSmustache-2.3.0-IRGZVtYphlY2Ty3g5ntuzk-ghc8.2.2.so => /nix/store/j3gzq2xdk2qc22f8yfwhiqwj2xj6xjyz-mustache-2.3.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmustache-2.3.0-IRGZVtYphlY2Ty3g5ntuzk-ghc8.2.2.so (0x00007f92b9969000) libHSth-lift-0.7.8-9WoT75e11sF5vCUkzmby5Q-ghc8.2.2.so => /nix/store/wqs29h2l22752jipa3lv65cdc17qajnp-th-lift-0.7.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-lift-0.7.8-9WoT75e11sF5vCUkzmby5Q-ghc8.2.2.so (0x00007f92b9752000) libHSeither-5-HwpNNQ7XWy1EZ4newzHNcZ-ghc8.2.2.so => /nix/store/sjy61lplxf58xzwqnvicc9ifknqskxnv-either-5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSeither-5-HwpNNQ7XWy1EZ4newzHNcZ-ghc8.2.2.so (0x00007f92b953a000) libHSsemigroupoids-5.2.2-H8OSejxdMoGJhAKBjB1jAX-ghc8.2.2.so => /nix/store/paa8gg9z55mzzhi8sniyc981z9swbg9c-semigroupoids-5.2.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsemigroupoids-5.2.2-H8OSejxdMoGJhAKBjB1jAX-ghc8.2.2.so (0x00007f92b925c000) libHSprofunctors-5.2.2-FV1gNe3KaUiHYUtKseXDDY-ghc8.2.2.so => /nix/store/6lb3dds2vggs7qzhz3nsrs5rijfhs3dv-profunctors-5.2.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSprofunctors-5.2.2-FV1gNe3KaUiHYUtKseXDDY-ghc8.2.2.so (0x00007f92b8f96000) libHSmono-traversable-1.0.8.1-KgmfkgnpJ0j7hDJ11qqAPI-ghc8.2.2.so => /nix/store/a13x1as95lbnvlk8clkfiscx3sk4bzl1-mono-traversable-1.0.8.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmono-traversable-1.0.8.1-KgmfkgnpJ0j7hDJ11qqAPI-ghc8.2.2.so (0x00007f92b8c0b000) libHSvector-algorithms-0.7.0.1-BJcmPBA0jxnARm14NBaZZV-ghc8.2.2.so => /nix/store/ra9mxyj96b6wzabqym246prwshim7a8v-vector-algorithms-0.7.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSvector-algorithms-0.7.0.1-BJcmPBA0jxnARm14NBaZZV-ghc8.2.2.so (0x00007f92b872b000) libHSsplit-0.2.3.3-69JBPqG5rhJEaFzFyiVOGW-ghc8.2.2.so => /nix/store/8dcdkiihkl1g0x0h59hzjj0rg89k1w6f-split-0.2.3.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsplit-0.2.3.3-69JBPqG5rhJEaFzFyiVOGW-ghc8.2.2.so (0x00007f92b8512000) libHSmonad-logger-0.3.28.5-Fa7Fcf0oWQ7I67A24Cxqby-ghc8.2.2.so => /nix/store/kczjcxy630ayq1jxp23a7cnplf7wc222-monad-logger-0.3.28.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmonad-logger-0.3.28.5-Fa7Fcf0oWQ7I67A24Cxqby-ghc8.2.2.so (0x00007f92b82ad000) libHSstm-chans-3.0.0.4-CCAl5LYzSHE3KWzUg6hDwY-ghc8.2.2.so => /nix/store/ki3iy2pd210gyib8hbnaii78d337dgsg-stm-chans-3.0.0.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSstm-chans-3.0.0.4-CCAl5LYzSHE3KWzUg6hDwY-ghc8.2.2.so (0x00007f92b808c000) libHSmonad-loops-0.4.3-Ad5oA5oDZiu5B1obbGSEb1-ghc8.2.2.so => /nix/store/jsa4fbhxhf1x15cmmfms79grs47630ni-monad-loops-0.4.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmonad-loops-0.4.3-Ad5oA5oDZiu5B1obbGSEb1-ghc8.2.2.so (0x00007f92b7e76000) libHSfast-logger-2.4.11-CBTEyt5Rk1Zubz30pUlI-ghc8.2.2.so => /nix/store/1hql8f15yzbrxffdkxb3pfl9fij5grg6-fast-logger-2.4.11/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSfast-logger-2.4.11-CBTEyt5Rk1Zubz30pUlI-ghc8.2.2.so (0x00007f92b7c4c000) libHSunix-time-0.3.8-1XDnYdoymCuDsUCeNRblep-ghc8.2.2.so => /nix/store/b8acs9ym5wqsllri7ydh3nldybkdihfz-unix-time-0.3.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSunix-time-0.3.8-1XDnYdoymCuDsUCeNRblep-ghc8.2.2.so (0x00007f92b7a34000) libHSold-time-1.1.0.3-LmKk8FUXtYwDVw5bR99HBe-ghc8.2.2.so => /nix/store/xxaslzy3dxlzmsnf45klba3kkg1kckc1-old-time-1.1.0.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSold-time-1.1.0.3-LmKk8FUXtYwDVw5bR99HBe-ghc8.2.2.so (0x00007f92b77de000) libHSold-locale-1.0.0.7-uLYLcRn7Nv8SkmeS8fMf9-ghc8.2.2.so => /nix/store/xhs9bp1bhfk8wfhg8fsjrmgh8kl8369m-old-locale-1.0.0.7/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSold-locale-1.0.0.7-uLYLcRn7Nv8SkmeS8fMf9-ghc8.2.2.so (0x00007f92b75c8000) libHSeasy-file-0.2.1-5b8TLyPnfnyBZsfKKpqnpK-ghc8.2.2.so => /nix/store/f0sinw1slchwkx3i8dwbhvj5z7ay7q3c-easy-file-0.2.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSeasy-file-0.2.1-5b8TLyPnfnyBZsfKKpqnpK-ghc8.2.2.so (0x00007f92b73b4000) libHSauto-update-0.1.4-DRogbfFYNQeJCAE3NJ8IZH-ghc8.2.2.so => /nix/store/y9xxp933a45r56xvbaikrmrc3pcsxq3n-auto-update-0.1.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSauto-update-0.1.4-DRogbfFYNQeJCAE3NJ8IZH-ghc8.2.2.so (0x00007f92b71a4000) libHSmintty-0.1.1-5pAMEmpWcFDFkMLqWRTQo7-ghc8.2.2.so => /nix/store/nhd3cljraz4wq8qwrwv0sxpkjgmaxba2-mintty-0.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmintty-0.1.1-5pAMEmpWcFDFkMLqWRTQo7-ghc8.2.2.so (0x00007f92b6fa1000) libHSmicrolens-0.4.8.3-Hhd1pyfmRF65YkTRK2Yote-ghc8.2.2.so => /nix/store/kniv9b3v0zp71zvvnpqqcm2z7z6lkn0j-microlens-0.4.8.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmicrolens-0.4.8.3-Hhd1pyfmRF65YkTRK2Yote-ghc8.2.2.so (0x00007f92b6d82000) libHShttp-conduit-2.3.1-CMAM6o9zqGc3OubsCi2I5w-ghc8.2.2.so => /nix/store/65p0ba53528yiim9gcqs0dibsl1l9nyp-http-conduit-2.3.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShttp-conduit-2.3.1-CMAM6o9zqGc3OubsCi2I5w-ghc8.2.2.so (0x00007f92b6b60000) libHShpc-0.6.0.3-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/hpc-0.6.0.3/libHShpc-0.6.0.3-ghc8.2.2.so (0x00007f92b692d000) libHShpack-0.28.2-4mJOk6tnuMJ8CoFuechuuM-ghc8.2.2.so => /nix/store/9labb5y1hd0a9c13lp0fzidfd7iaq4ca-hpack-0.28.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShpack-0.28.2-4mJOk6tnuMJ8CoFuechuuM-ghc8.2.2.so (0x00007f92b654b000) libHSyaml-0.8.29-HgTMAY9Tl3H461sI9H7jWz-ghc8.2.2.so => /nix/store/la4mryr71c085qcsm5zfkd5qdybdixy0-yaml-0.8.29/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSyaml-0.8.29-HgTMAY9Tl3H461sI9H7jWz-ghc8.2.2.so (0x00007f92b625f000) libHShttp-client-tls-0.3.5.3-2F7deAnWpYH7fLrg0yjoiQ-ghc8.2.2.so => /nix/store/qkcg8m1jlf6fcpdqag32amssmx2sw95d-http-client-tls-0.3.5.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShttp-client-tls-0.3.5.3-2F7deAnWpYH7fLrg0yjoiQ-ghc8.2.2.so (0x00007f92b6037000) libHSconnection-0.2.8-GTooNqtzoZ240mqTeWrS40-ghc8.2.2.so => /nix/store/m9mhzkh80msa9s699m4w558ln74z9vhg-connection-0.2.8/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSconnection-0.2.8-GTooNqtzoZ240mqTeWrS40-ghc8.2.2.so (0x00007f92b5e0c000) libHSx509-system-1.6.6-KApNaK1lTsZDPsYiRcvdzF-ghc8.2.2.so => /nix/store/32p19ndpmajv5sg0fr3dxbas3m0c7ijj-x509-system-1.6.6/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSx509-system-1.6.6-KApNaK1lTsZDPsYiRcvdzF-ghc8.2.2.so (0x00007f92b5c03000) libHStls-1.4.1-GKEUJTmcnbV2VLE3MSrrKm-ghc8.2.2.so => /nix/store/g9lfwb6i17m9vzavicfjk5706xa7y2yf-tls-1.4.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStls-1.4.1-GKEUJTmcnbV2VLE3MSrrKm-ghc8.2.2.so (0x00007f92b573d000) libHSx509-validation-1.6.10-3qiHO9UPHP2HD08sw2ooN3-ghc8.2.2.so => /nix/store/h0j2hvsdl06nd452259xpl2lzmlqyhif-x509-validation-1.6.10/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSx509-validation-1.6.10-3qiHO9UPHP2HD08sw2ooN3-ghc8.2.2.so (0x00007f92b550a000) libHSx509-store-1.6.6-6V5zSmrTG7HILnCujPSoy-ghc8.2.2.so => /nix/store/iw2mjiq94xz3kc720lh57v4vqdbkx512-x509-store-1.6.6/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSx509-store-1.6.6-6V5zSmrTG7HILnCujPSoy-ghc8.2.2.so (0x00007f92b52f3000) libHSx509-1.7.3-AjtUQ7DxmoME2vs4LWoVuw-ghc8.2.2.so => /nix/store/lkr3ma1aq9scjl8m8k0ciah6jl9havb3-x509-1.7.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSx509-1.7.3-AjtUQ7DxmoME2vs4LWoVuw-ghc8.2.2.so (0x00007f92b5002000) libHSasn1-parse-0.9.4-8PKB25jEtIxJlcJFNgQeku-ghc8.2.2.so => /nix/store/0lxrlak6n5v51jg0x5qcmm92dvp22bxy-asn1-parse-0.9.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSasn1-parse-0.9.4-8PKB25jEtIxJlcJFNgQeku-ghc8.2.2.so (0x00007f92b4df8000) libHSpem-0.2.4-5caOOIrOknr1TM8Z9CKx1K-ghc8.2.2.so => /nix/store/13v8dh50nrwlq3fqz5436j2c15vw22b0-pem-0.2.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSpem-0.2.4-5caOOIrOknr1TM8Z9CKx1K-ghc8.2.2.so (0x00007f92b4bea000) libHSasn1-encoding-0.9.5-2ICF8dfb7uM5jgVSSSaWpD-ghc8.2.2.so => /nix/store/w9axrx7ckd067xnh5i7pmnamcjrib9hm-asn1-encoding-0.9.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSasn1-encoding-0.9.5-2ICF8dfb7uM5jgVSSSaWpD-ghc8.2.2.so (0x00007f92b49a0000) libHSasn1-types-0.3.2-BtN453OdbksLeiNs6aKDnJ-ghc8.2.2.so => /nix/store/9zr8bjlwhpc0vcxn7zaigfm7wxglrpq6-asn1-types-0.3.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSasn1-types-0.3.2-BtN453OdbksLeiNs6aKDnJ-ghc8.2.2.so (0x00007f92b4750000) libHShourglass-0.2.11-B3mREtpqzqdLOYeBlF8sLs-ghc8.2.2.so => /nix/store/6jyygvryrcyw2fblqwac8y9w9jlp90bm-hourglass-0.2.11/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShourglass-0.2.11-B3mREtpqzqdLOYeBlF8sLs-ghc8.2.2.so (0x00007f92b4439000) libHSsocks-0.5.6-EvT6QNLaafN9Cv9lPt0BmN-ghc8.2.2.so => /nix/store/f98wa3i74xnsir3vz2yxa4kxrfdkdhyj-socks-0.5.6/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsocks-0.5.6-EvT6QNLaafN9Cv9lPt0BmN-ghc8.2.2.so (0x00007f92b4199000) libHScereal-0.5.5.0-LlCRTX2XyPnC6qdZ6C2b02-ghc8.2.2.so => /nix/store/iziqr0cxlm7gx5fc90g1z7h4nsafx4z1-cereal-0.5.5.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScereal-0.5.5.0-LlCRTX2XyPnC6qdZ6C2b02-ghc8.2.2.so (0x00007f92b3ee9000) libHSbyteable-0.1.1-4PLPgH6a2E14oN7yL5y3oL-ghc8.2.2.so => /nix/store/p50gpml43s10a3rkfkg7r1hrlagwfacf-byteable-0.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbyteable-0.1.1-4PLPgH6a2E14oN7yL5y3oL-ghc8.2.2.so (0x00007f92b3ce4000) libHShttp-client-0.5.12.1-K73qDqGt0lsIFlDssg4MGY-ghc8.2.2.so => /nix/store/hfkz7aa3rscfmc0hlp04vfyf42ay3r6r-http-client-0.5.12.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShttp-client-0.5.12.1-K73qDqGt0lsIFlDssg4MGY-ghc8.2.2.so (0x00007f92b39b5000) libHSmime-types-0.1.0.7-DTXyYpVURN25abCNUZNVsq-ghc8.2.2.so => /nix/store/jgc8bqfgrbd8i622z9vk5dw11q82r4a8-mime-types-0.1.0.7/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmime-types-0.1.0.7-DTXyYpVURN25abCNUZNVsq-ghc8.2.2.so (0x00007f92b362d000) libHScookie-0.4.4-1NgbbOfwxjjGo6IX8WM10y-ghc8.2.2.so => /nix/store/z5g2sawbikl7dpryvxg03k8ik0fn4zqk-cookie-0.4.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScookie-0.4.4-1NgbbOfwxjjGo6IX8WM10y-ghc8.2.2.so (0x00007f92b3415000) libHSdata-default-class-0.1.2.0-8hmGYd6GPAfLQPQcWKOjRm-ghc8.2.2.so => /nix/store/2zsxvwx4gschv0ppvlz1rh3cil043jq0-data-default-class-0.1.2.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSdata-default-class-0.1.2.0-8hmGYd6GPAfLQPQcWKOjRm-ghc8.2.2.so (0x00007f92b320d000) libHShttp-types-0.12.1-5fkdaOUl5uG9QTP7wjfqRR-ghc8.2.2.so => /nix/store/vfjym2bpjp0azpp3gkhyy36j01fn5xd5-http-types-0.12.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShttp-types-0.12.1-5fkdaOUl5uG9QTP7wjfqRR-ghc8.2.2.so (0x00007f92b2fa3000) libHScase-insensitive-1.2.0.11-91nStISCpEe8lKUouJ02Q8-ghc8.2.2.so => /nix/store/65xyvgdq931rbyiz0lz443viz94ffmhh-case-insensitive-1.2.0.11/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScase-insensitive-1.2.0.11-91nStISCpEe8lKUouJ02Q8-ghc8.2.2.so (0x00007f92b2d8b000) libHSbifunctors-5.5.2-DQ7wmCq465j517s7VZdrGy-ghc8.2.2.so => /nix/store/62zi3ib7ap98f166hshiiz804inm46p5-bifunctors-5.5.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbifunctors-5.5.2-DQ7wmCq465j517s7VZdrGy-ghc8.2.2.so (0x00007f92b2ab6000) libHScomonad-5.0.3-9I20dad111p51vtXykJWDE-ghc8.2.2.so => /nix/store/2c2rsxqzazdcjpy7v66yp4ma9i790g3f-comonad-5.0.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScomonad-5.0.3-9I20dad111p51vtXykJWDE-ghc8.2.2.so (0x00007f92b2872000) libHSdistributive-0.5.3-Ck25wkVMTGZ72P2bjmaPmd-ghc8.2.2.so => /nix/store/5ms0947mdcfgqgpy6nik6dcdyn6hf2m4-distributive-0.5.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSdistributive-0.5.3-Ck25wkVMTGZ72P2bjmaPmd-ghc8.2.2.so (0x00007f92b2658000) libHScontravariant-1.4.1-JXjDAnKZeh1Db1ZTeevPkj-ghc8.2.2.so => /nix/store/q6860msq0gcf937s5a228m3nn3ympb0h-contravariant-1.4.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScontravariant-1.4.1-JXjDAnKZeh1Db1ZTeevPkj-ghc8.2.2.so (0x00007f92b2410000) libHSStateVar-1.1.1.0-7hicwZfZdWh9t78q7QM8bm-ghc8.2.2.so => /nix/store/afwghz4xh5ydhmy2201v2kz3x9d4admr-StateVar-1.1.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSStateVar-1.1.1.0-7hicwZfZdWh9t78q7QM8bm-ghc8.2.2.so (0x00007f92b2206000) libHSsemigroups-0.18.4-mxkGq2xNPcBC0dj8uuk3q-ghc8.2.2.so => /nix/store/vnxmfval7p06bfb511qyaivcfsgidfjp-semigroups-0.18.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSsemigroups-0.18.4-mxkGq2xNPcBC0dj8uuk3q-ghc8.2.2.so (0x00007f92b2001000) libHSbase-orphans-0.7-CqEfBQ2VoSwBto5sloaJI4-ghc8.2.2.so => /nix/store/rcbsqkwamjx10wm4fj1ks3vdnaibspaz-base-orphans-0.7/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbase-orphans-0.7-CqEfBQ2VoSwBto5sloaJI4-ghc8.2.2.so (0x00007f92b1df1000) libHSGlob-0.9.2-B0gAg5I1EFbLLrqvbBP6OJ-ghc8.2.2.so => /nix/store/dmvin2b4xpv3a24472jpf2svjafzkfzw-Glob-0.9.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSGlob-0.9.2-B0gAg5I1EFbLLrqvbBP6OJ-ghc8.2.2.so (0x00007f92b1bab000) libHShackage-security-0.5.3.0-7M6sFZaI6bw6KvfGtmE3ZO-ghc8.2.2.so => /nix/store/n7g29bkiyykyk3k55fcd4cp9z7n5khx4-hackage-security-0.5.3.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShackage-security-0.5.3.0-7M6sFZaI6bw6KvfGtmE3ZO-ghc8.2.2.so (0x00007f92b17e0000) libHSnetwork-uri-2.6.1.0-G6PLTuqdJBw2q2cxBMMXWS-ghc8.2.2.so => /nix/store/gbyrr7ywrqns4jj8fck7q209zls6gfqs-network-uri-2.6.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSnetwork-uri-2.6.1.0-G6PLTuqdJBw2q2cxBMMXWS-ghc8.2.2.so (0x00007f92b157e000) libHStar-0.5.1.0-1vGndAZtBGd3QXLTtC7xWX-ghc8.2.2.so => /nix/store/h4k7g0gqvs0zm9msg5n60brmcd5x50x2-tar-0.5.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStar-0.5.1.0-1vGndAZtBGd3QXLTtC7xWX-ghc8.2.2.so (0x00007f92b12ea000) libHScryptohash-sha256-0.11.101.0-2y5kOPF2abcAQTysw8Z7cK-ghc8.2.2.so => /nix/store/86g8kna38v99zppqn5zisfz8w9xvpzpb-cryptohash-sha256-0.11.101.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScryptohash-sha256-0.11.101.0-2y5kOPF2abcAQTysw8Z7cK-ghc8.2.2.so (0x00007f92b10dc000) libHSed25519-0.0.5.0-3Sle7uACwGIJ1UEE9iZB8E-ghc8.2.2.so => /nix/store/6ak0afd8v8bslgq6zmrrwg16n123qy5x-ed25519-0.0.5.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSed25519-0.0.5.0-3Sle7uACwGIJ1UEE9iZB8E-ghc8.2.2.so (0x00007f92b0eb6000) libHSbase16-bytestring-0.1.1.6-Bd4rUARbKHBrsqzcqGjb8-ghc8.2.2.so => /nix/store/ssh3d1jrv87l3pn4vrh1d83sy312zqya-base16-bytestring-0.1.1.6/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbase16-bytestring-0.1.1.6-Bd4rUARbKHBrsqzcqGjb8-ghc8.2.2.so (0x00007f92b0caf000) libHSgitrev-1.3.1-JVrypmYNWjs1jJQPEs0aKn-ghc8.2.2.so => /nix/store/8fz0iczvbxkygihgysd1qv3q2amyiga4-gitrev-1.3.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSgitrev-1.3.1-JVrypmYNWjs1jJQPEs0aKn-ghc8.2.2.so (0x00007f92b0aa1000) libHSgeneric-deriving-1.12.1-Bxlt1y52EGQYSIu2pS2y-ghc8.2.2.so => /nix/store/x9b8cgpvbq3x23ays3n90r6dcpd1w1fs-generic-deriving-1.12.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSgeneric-deriving-1.12.1-Bxlt1y52EGQYSIu2pS2y-ghc8.2.2.so (0x00007f92b067f000) libHSfsnotify-0.2.1.1-5xOwVLfVkf5LItHEvRM4FG-ghc8.2.2.so => /nix/store/y4z6l3dr6qazh4drfdnc2if84mryply8-fsnotify-0.2.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSfsnotify-0.2.1.1-5xOwVLfVkf5LItHEvRM4FG-ghc8.2.2.so (0x00007f92b044f000) libHShinotify-0.3.9-EGS0JK3sdmbB9cxB8hIv6q-ghc8.2.2.so => /nix/store/qxij3vw2806yrdwspzp375z54jgd5zna-hinotify-0.3.9/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShinotify-0.3.9-EGS0JK3sdmbB9cxB8hIv6q-ghc8.2.2.so (0x00007f92b021a000) libHSunix-compat-0.5.0.1-AtNnJ204ySI1W22dRbQG6f-ghc8.2.2.so => /nix/store/0pm81n14wiy9zrg8czkfdnp0ar9y63q7-unix-compat-0.5.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSunix-compat-0.5.0.1-AtNnJ204ySI1W22dRbQG6f-ghc8.2.2.so (0x00007f92b0015000) libHSfilelock-0.1.1.2-9HxtlrNhwXq8yLCvIrzm2F-ghc8.2.2.so => /nix/store/z5yi5kalv7jsm5pq1pv6i09yrrjmwnss-filelock-0.1.1.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSfilelock-0.1.1.2-9HxtlrNhwXq8yLCvIrzm2F-ghc8.2.2.so (0x00007f92afe09000) libHSfile-embed-0.0.10.1-dHJWrXRvu59h2yyMVhlwG-ghc8.2.2.so => /nix/store/rb1jyzpkggrzkyqp1hipmk5j28ih0p11-file-embed-0.0.10.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSfile-embed-0.0.10.1-dHJWrXRvu59h2yyMVhlwG-ghc8.2.2.so (0x00007f92afbf5000) libHSextra-1.6.6-GM4yzr0zpA18TiDAcErDri-ghc8.2.2.so => /nix/store/b0dqj47h6m17w6ry1l4ldi786rspirwa-extra-1.6.6/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSextra-1.6.6-GM4yzr0zpA18TiDAcErDri-ghc8.2.2.so (0x00007f92af9a5000) libHSclock-0.7.2-7eenmRf30tW97adCwu2PN3-ghc8.2.2.so => /nix/store/971fqmqhpkg0fl6kmnnaafbiyiaj2yxs-clock-0.7.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSclock-0.7.2-7eenmRf30tW97adCwu2PN3-ghc8.2.2.so (0x00007f92af77f000) libHSecho-0.1.3-BlErO49OOLiLJPizijFtq4-ghc8.2.2.so => /nix/store/whlzfl8sfl2gh8qc1308m9agcghkjpj2-echo-0.1.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSecho-0.1.3-BlErO49OOLiLJPizijFtq4-ghc8.2.2.so (0x00007f92af574000) libHScryptonite-conduit-0.2.2-LgulAht1wxa7YtDmIeu7ug-ghc8.2.2.so => /nix/store/ikshd72p7zcm6cq29vzh9ykq2q49gbh0-cryptonite-conduit-0.2.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScryptonite-conduit-0.2.2-LgulAht1wxa7YtDmIeu7ug-ghc8.2.2.so (0x00007f92af35c000) libHScryptonite-0.25-62KWfqjG1f38Ag9mk6p5ih-ghc8.2.2.so => /nix/store/22vgg5b30z0jd6gwaq14hhk06rqm1wxy-cryptonite-0.25/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScryptonite-0.25-62KWfqjG1f38Ag9mk6p5ih-ghc8.2.2.so (0x00007f92aebcb000) libHSmemory-0.14.16-90ZvZkwyKaT183ULDNL3KX-ghc8.2.2.so => /nix/store/4ni0w1sns3gay4j5b5czs19ngzhz6105-memory-0.14.16/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmemory-0.14.16-90ZvZkwyKaT183ULDNL3KX-ghc8.2.2.so (0x00007f92ae931000) libHSfoundation-0.0.20-HOitMdSXh1H2RFYoixhqVb-ghc8.2.2.so => /nix/store/a3qhxvcbhfrg5l9n07n84m2slcrh2h6f-foundation-0.0.20/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSfoundation-0.0.20-HOitMdSXh1H2RFYoixhqVb-ghc8.2.2.so (0x00007f92ae405000) libHSbasement-0.0.7-IRcTCDmYoctGxt4FUYqdQc-ghc8.2.2.so => /nix/store/g5nyj7m9n1h9cpbrlibl114zxbkksha1-basement-0.0.7/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbasement-0.0.7-IRcTCDmYoctGxt4FUYqdQc-ghc8.2.2.so (0x00007f92adf0b000) libHSconduit-extra-1.2.3.2-4hUXLG1HftQZOwdZx0nl9-ghc8.2.2.so => /nix/store/51jwnygr75dw4ld5rp4wij7f533r9r80-conduit-extra-1.2.3.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSconduit-extra-1.2.3.2-4hUXLG1HftQZOwdZx0nl9-ghc8.2.2.so (0x00007f92adc69000) libHStyped-process-0.2.2.0-6M1iMQzelaL3rGgOwQfevW-ghc8.2.2.so => /nix/store/7ll50155zg8721kpmz73yi0mlg2pwfhq-typed-process-0.2.2.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStyped-process-0.2.2.0-6M1iMQzelaL3rGgOwQfevW-ghc8.2.2.so (0x00007f92ada34000) libHSstreaming-commons-0.1.19-KuNTfYfBAJRIRX5MWsQU26-ghc8.2.2.so => /nix/store/73cryf9gbfqdnzasdvqfd0lz4f88af6a-streaming-commons-0.1.19/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSstreaming-commons-0.1.19-KuNTfYfBAJRIRX5MWsQU26-ghc8.2.2.so (0x00007f92ad79a000) libHSzlib-0.6.2-7YwI9pUae6uDEuDsJgYPoD-ghc8.2.2.so => /nix/store/3k0h6gwvqvbr6hmbl8356jnq4dl3vhhg-zlib-0.6.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSzlib-0.6.2-7YwI9pUae6uDEuDsJgYPoD-ghc8.2.2.so (0x00007f92ad520000) libHSnetwork-2.6.3.5-7QeClNawG4zBUywSiaHaqa-ghc8.2.2.so => /nix/store/bzsapw6afh22fm42932rwisk64rgs039-network-2.6.3.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSnetwork-2.6.3.5-7QeClNawG4zBUywSiaHaqa-ghc8.2.2.so (0x00007f92ad23c000) libHSblaze-builder-0.4.1.0-CqkRAAJSGiQ47baHFgUT5M-ghc8.2.2.so => /nix/store/yspi7rhb9qpjyk9kq0kldpkvnfndhmd7-blaze-builder-0.4.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSblaze-builder-0.4.1.0-CqkRAAJSGiQ47baHFgUT5M-ghc8.2.2.so (0x00007f92ad012000) libHSconduit-1.2.13-GUWPaAQois19DNSy2lTGcL-ghc8.2.2.so => /nix/store/3qknc5wrgh9j65cqdz42mryli4hm04ng-conduit-1.2.13/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSconduit-1.2.13-GUWPaAQois19DNSy2lTGcL-ghc8.2.2.so (0x00007f92acd86000) libHSresourcet-1.1.11-9X7MX7SkwfwG1XRBhnDCQN-ghc8.2.2.so => /nix/store/z291gjw9crp1n9hzd0rfpx3w3z4hlr04-resourcet-1.1.11/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSresourcet-1.1.11-9X7MX7SkwfwG1XRBhnDCQN-ghc8.2.2.so (0x00007f92acb37000) libHSunliftio-core-0.1.1.0-3wrHy3Ijr0BBoYMyh4oX3g-ghc8.2.2.so => /nix/store/akl0g2am1rl1mj4cx9vyry63mzyr40zh-unliftio-core-0.1.1.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSunliftio-core-0.1.1.0-3wrHy3Ijr0BBoYMyh4oX3g-ghc8.2.2.so (0x00007f92ac92b000) libHSexceptions-0.8.3-CYMTujxEbkkJnOJ7pW82ZD-ghc8.2.2.so => /nix/store/icbf5j8a2fkjlvknysyb90xwnj45dg00-exceptions-0.8.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSexceptions-0.8.3-CYMTujxEbkkJnOJ7pW82ZD-ghc8.2.2.so (0x00007f92ac6fd000) libHSmmorph-1.1.2-KKZMr2x9eQv4KwETGEYeu-ghc8.2.2.so => /nix/store/2g96g65b9r9p271znsq67hjb103rdgbr-mmorph-1.1.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmmorph-1.1.2-KKZMr2x9eQv4KwETGEYeu-ghc8.2.2.so (0x00007f92ac4e3000) libHSlifted-base-0.2.3.12-KnyxeRaMqLRBcTXo636g7H-ghc8.2.2.so => /nix/store/2ssy40n6gld19im4f88c999dsa47zmzq-lifted-base-0.2.3.12/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSlifted-base-0.2.3.12-KnyxeRaMqLRBcTXo636g7H-ghc8.2.2.so (0x00007f92ac2cc000) libHSmonad-control-1.0.2.3-KW4P5rxfhfj5WtFbu3Ojsg-ghc8.2.2.so => /nix/store/3hnzhxj8mx4r2vp58568bjd8mnbiinns-monad-control-1.0.2.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmonad-control-1.0.2.3-KW4P5rxfhfj5WtFbu3Ojsg-ghc8.2.2.so (0x00007f92ac0b8000) libHStransformers-base-0.4.4-CrsDENFNf7rEcT9CB0YGwO-ghc8.2.2.so => /nix/store/qg7wccrp63wriswa0xiybcr7pi9ni75f-transformers-base-0.4.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStransformers-base-0.4.4-CrsDENFNf7rEcT9CB0YGwO-ghc8.2.2.so (0x00007f92abea5000) libHSbindings-uname-0.1-45DrDjuI55gKkuB6UCdOqj-ghc8.2.2.so => /nix/store/hjkmblsrqs7safsaywk8q6f2marg91h8-bindings-uname-0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbindings-uname-0.1-45DrDjuI55gKkuB6UCdOqj-ghc8.2.2.so (0x00007f92abca0000) libHSbase64-bytestring-1.0.0.1-8MlzMz2YH3lCqJ4GOwL1Be-ghc8.2.2.so => /nix/store/nh1fr6dxb9yi8l0zbkavcg53si5s4z7x-base64-bytestring-1.0.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbase64-bytestring-1.0.0.1-8MlzMz2YH3lCqJ4GOwL1Be-ghc8.2.2.so (0x00007f92aba8d000) libHSasync-2.1.1.1-K429Y4XjamzDpSomhW85Gx-ghc8.2.2.so => /nix/store/x0q276vyf8mggc7ww4dn4cp4npflypdp-async-2.1.1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSasync-2.1.1.1-K429Y4XjamzDpSomhW85Gx-ghc8.2.2.so (0x00007f92ab86d000) libHSstm-2.4.5.0-15FdumhhnVEKazIoQZDzp1-ghc8.2.2.so => /nix/store/wdv09il0209cgip61mfybxjfhlsz9hz4-stm-2.4.5.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSstm-2.4.5.0-15FdumhhnVEKazIoQZDzp1-ghc8.2.2.so (0x00007f92ab64b000) libHSansi-terminal-0.8.0.2-IpPwz0rbeQT9XeWFhl38AU-ghc8.2.2.so => /nix/store/yvfav90wmhik0pp2fyflyrw3v7iwvs86-ansi-terminal-0.8.0.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSansi-terminal-0.8.0.2-IpPwz0rbeQT9XeWFhl38AU-ghc8.2.2.so (0x00007f92ab3d0000) libHScolour-2.3.4-3MiiEznBxpfEYrMTHbnSer-ghc8.2.2.so => /nix/store/35c3w42xlb16ydmahzhaqf9aiz9zjr27-colour-2.3.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHScolour-2.3.4-3MiiEznBxpfEYrMTHbnSer-ghc8.2.2.so (0x00007f92ab142000) libHSannotated-wl-pprint-0.7.0-8APeXc1MGYdCeWTvpg0wB3-ghc8.2.2.so => /nix/store/iayaw107y70g9adc5ap1cn93bipp7w3a-annotated-wl-pprint-0.7.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSannotated-wl-pprint-0.7.0-8APeXc1MGYdCeWTvpg0wB3-ghc8.2.2.so (0x00007f92aaf20000) libHSaeson-1.2.4.0-IZgp4ercYqiAqcUp51Tw42-ghc8.2.2.so => /nix/store/n5228ii2fyw6w7chhckkz2qjn15nrx0y-aeson-1.2.4.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSaeson-1.2.4.0-IZgp4ercYqiAqcUp51Tw42-ghc8.2.2.so (0x00007f92aa7f7000) libHSvector-0.12.0.1-JlawpRjIcMJIYPJVsWriIA-ghc8.2.2.so => /nix/store/z9yj57lc3nl4lv8vzpa6gr6az0q5jpfh-vector-0.12.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSvector-0.12.0.1-JlawpRjIcMJIYPJVsWriIA-ghc8.2.2.so (0x00007f92aa21a000) libHSuuid-types-1.0.3-FIpcrdZ1A2W7hy4rij87ad-ghc8.2.2.so => /nix/store/6nxfqb5ch1kdlndjfx9fyiah50b33sm6-uuid-types-1.0.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSuuid-types-1.0.3-FIpcrdZ1A2W7hy4rij87ad-ghc8.2.2.so (0x00007f92a9fe9000) libHSrandom-1.1-LLUGZ7T9DqQ5vN0Jbcd0We-ghc8.2.2.so => /nix/store/m2shv60yfi06wkg641w6h8k72m8dg1iv-random-1.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSrandom-1.1-LLUGZ7T9DqQ5vN0Jbcd0We-ghc8.2.2.so (0x00007f92a9d87000) libHSunordered-containers-0.2.9.0-8cLD8MW1bwF1Ze0IMEHxYR-ghc8.2.2.so => /nix/store/65r1za2g30nmy2xjfvzdrg0n46r0a15k-unordered-containers-0.2.9.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSunordered-containers-0.2.9.0-8cLD8MW1bwF1Ze0IMEHxYR-ghc8.2.2.so (0x00007f92a9b05000) libHStime-locale-compat-0.1.1.4-FqzYYa9EZnWKlCa8Hk2yZO-ghc8.2.2.so => /nix/store/z92i6j94zhgpcbi960j07282vr1in2y1-time-locale-compat-0.1.1.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStime-locale-compat-0.1.1.4-FqzYYa9EZnWKlCa8Hk2yZO-ghc8.2.2.so (0x00007f92a9902000) libHSth-abstraction-0.2.6.0-KdJUlqAwMfUIgxZVMgLLVd-ghc8.2.2.so => /nix/store/f0y0rv4413m2ahq4wzrqxrmqvjv9c27z-th-abstraction-0.2.6.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSth-abstraction-0.2.6.0-KdJUlqAwMfUIgxZVMgLLVd-ghc8.2.2.so (0x00007f92a9683000) libHStagged-0.8.5-HviTdonkllN1ZD6he1Zn8I-ghc8.2.2.so => /nix/store/rxqihgca0vakpb50pmq8yrd66djkh1c2-tagged-0.8.5/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStagged-0.8.5-HviTdonkllN1ZD6he1Zn8I-ghc8.2.2.so (0x00007f92a9458000) libHStransformers-compat-0.5.1.4-EAh8Ccrgitz4vTZtbTPyCM-ghc8.2.2.so => /nix/store/k25bhcln6x835nw04prjx3b4rsfpviri-transformers-compat-0.5.1.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStransformers-compat-0.5.1.4-EAh8Ccrgitz4vTZtbTPyCM-ghc8.2.2.so (0x00007f92a924f000) libHStemplate-haskell-2.12.0.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/template-haskell-2.12.0.0/libHStemplate-haskell-2.12.0.0-ghc8.2.2.so (0x00007f92a8d00000) libHSghc-boot-th-8.2.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/ghc-boot-th-8.2.2/libHSghc-boot-th-8.2.2-ghc8.2.2.so (0x00007f92a8ac4000) libHSdlist-0.8.0.4-C5jxmU4NyxKI1pN7pAcXnu-ghc8.2.2.so => /nix/store/lirxyhbys3ghnrl12hqji4pfmv90n4r8-dlist-0.8.0.4/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSdlist-0.8.0.4-C5jxmU4NyxKI1pN7pAcXnu-ghc8.2.2.so (0x00007f92a88b2000) libHSbase-compat-0.9.3-915GC5pH10BBmcMnCvMsPA-ghc8.2.2.so => /nix/store/hcivpxr3viybr12qb6wh5k7svwzxrq09-base-compat-0.9.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSbase-compat-0.9.3-915GC5pH10BBmcMnCvMsPA-ghc8.2.2.so (0x00007f92a86a7000) libHSattoparsec-0.13.2.2-I4VvmJLNJBvHKHbTOSuISE-ghc8.2.2.so => /nix/store/mjvz00d2d1i61d3ad5k0glkq1l3qvfgx-attoparsec-0.13.2.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSattoparsec-0.13.2.2-I4VvmJLNJBvHKHbTOSuISE-ghc8.2.2.so (0x00007f92a82ba000) libHSscientific-0.3.5.3-J53q9TSNgRG9JC9GWe5Qgq-ghc8.2.2.so => /nix/store/c3532dl9nsnp86zfh9p7b3v2sslavfpg-scientific-0.3.5.3/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSscientific-0.3.5.3-J53q9TSNgRG9JC9GWe5Qgq-ghc8.2.2.so (0x00007f92a8064000) libHSprimitive-0.6.3.0-CXy1O9sQYlI58rn9KQkFyo-ghc8.2.2.so => /nix/store/25d65w4ncmk8vhqv042dzlvrmkrgw7nw-primitive-0.6.3.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSprimitive-0.6.3.0-CXy1O9sQYlI58rn9KQkFyo-ghc8.2.2.so (0x00007f92a7dd5000) libHShashable-1.2.7.0-Idw6xX7wNurD1pqWILqENR-ghc8.2.2.so => /nix/store/x1yw5i69n94g41mkn9kd4xl1g20r6snd-hashable-1.2.7.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHShashable-1.2.7.0-Idw6xX7wNurD1pqWILqENR-ghc8.2.2.so (0x00007f92a7b9c000) libHSinteger-logarithms-1.0.2.1-KAhnLbvomfTHb5G0xy3U7G-ghc8.2.2.so => /nix/store/avawp2ry1ixzm221026269695nzi7r0m-integer-logarithms-1.0.2.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSinteger-logarithms-1.0.2.1-KAhnLbvomfTHb5G0xy3U7G-ghc8.2.2.so (0x00007f92a7984000) libHSCabal-2.2.0.1-KLAuiK6nw7BAbji2fdksE4-ghc8.2.2.so => /nix/store/w2mrdwgg0xhsznxyhhsk6jaik2ri68i7-Cabal-2.2.0.1/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSCabal-2.2.0.1-KLAuiK6nw7BAbji2fdksE4-ghc8.2.2.so (0x00007f92a5b34000) libHSparsec-3.1.13.0-6BLo566heT6JEy0ofGJI6h-ghc8.2.2.so => /nix/store/yabqgpnagzq28lr84ldgpnvh89jhz2j1-parsec-3.1.13.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSparsec-3.1.13.0-6BLo566heT6JEy0ofGJI6h-ghc8.2.2.so (0x00007f92a5880000) libHStext-1.2.3.0-GmbS1eycnDHLhZQQeWF5x-ghc8.2.2.so => /nix/store/qgbx0x30yf5r1fjkwgg0hrbw90pad0qs-text-1.2.3.0/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHStext-1.2.3.0-GmbS1eycnDHLhZQQeWF5x-ghc8.2.2.so (0x00007f92a53e2000) libHSbinary-0.8.5.1-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/binary-0.8.5.1/libHSbinary-0.8.5.1-ghc8.2.2.so (0x00007f92a513e000) libHSmtl-2.2.2-8XubxMJDT8QLsstvlNotkc-ghc8.2.2.so => /nix/store/v41s3sv7jnx27zhnrcmvrrx3slilimp6-mtl-2.2.2/lib/ghc-8.2.2/x86_64-linux-ghc-8.2.2/libHSmtl-2.2.2-8XubxMJDT8QLsstvlNotkc-ghc8.2.2.so (0x00007f92a4f08000) libHStransformers-0.5.2.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/transformers-0.5.2.0/libHStransformers-0.5.2.0-ghc8.2.2.so (0x00007f92a4bff000) libHSprocess-1.6.1.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/process-1.6.1.0/libHSprocess-1.6.1.0-ghc8.2.2.so (0x00007f92a49c2000) libHSdirectory-1.3.0.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/directory-1.3.0.2/libHSdirectory-1.3.0.2-ghc8.2.2.so (0x00007f92a4778000) libHSunix-2.7.2.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/unix-2.7.2.2/libHSunix-2.7.2.2-ghc8.2.2.so (0x00007f92a448c000) libHStime-1.8.0.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/time-1.8.0.2/libHStime-1.8.0.2-ghc8.2.2.so (0x00007f92a418f000) libHSpretty-1.1.3.3-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/pretty-1.1.3.3/libHSpretty-1.1.3.3-ghc8.2.2.so (0x00007f92a3f1c000) libHSfilepath-1.4.1.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/filepath-1.4.1.2/libHSfilepath-1.4.1.2-ghc8.2.2.so (0x00007f92a3cfa000) libHScontainers-0.5.10.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/containers-0.5.10.2/libHScontainers-0.5.10.2-ghc8.2.2.so (0x00007f92a381c000) libHSbytestring-0.10.8.2-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/bytestring-0.10.8.2/libHSbytestring-0.10.8.2-ghc8.2.2.so (0x00007f92a3528000) libHSdeepseq-1.4.3.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/deepseq-1.4.3.0/libHSdeepseq-1.4.3.0-ghc8.2.2.so (0x00007f92a330f000) libHSarray-0.5.2.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/array-0.5.2.0/libHSarray-0.5.2.0-ghc8.2.2.so (0x00007f92a308b000) libHSbase-4.10.1.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/base-4.10.1.0/libHSbase-4.10.1.0-ghc8.2.2.so (0x00007f92a24c5000) libHSinteger-gmp-1.0.1.0-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/integer-gmp-1.0.1.0/libHSinteger-gmp-1.0.1.0-ghc8.2.2.so (0x00007f92a228a000) libHSghc-prim-0.5.1.1-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/ghc-prim-0.5.1.1/libHSghc-prim-0.5.1.1-ghc8.2.2.so (0x00007f92a1bee000) libHSrts_thr-ghc8.2.2.so => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/rts/libHSrts_thr-ghc8.2.2.so (0x00007f92a197c000) libffi.so.6 => /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/rts/libffi.so.6 (0x00007f92a1773000) libz.so.1 => /nix/store/r43dk927l97n78rff7hnvsq49f3szkg6-zlib-1.2.11/lib/libz.so.1 (0x00007f92a155c000) libpthread.so.0 => /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/libpthread.so.0 (0x00007f92a133e000) librt.so.1 => /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/librt.so.1 (0x00007f92a1136000) libutil.so.1 => /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/libutil.so.1 (0x00007f92a0f33000) libdl.so.2 => /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/libdl.so.2 (0x00007f92a0d2f000) libgmp.so.10 => /nix/store/8qfd8gx0j3yzamkrbrfz5kc00h4cqd1q-gmp-6.1.2/lib/libgmp.so.10 (0x00007f92a0a9d000) libc.so.6 => /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/libc.so.6 (0x00007f92a06eb000) /nix/store/2kcrj1ksd2a14bm5sky182fv2xwfhfap-glibc-2.26-131/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f92c4556000) ```

Timings

% time /nix/store/6rdybwykb7lj9f6451hz7n54pijhhfdc-stack-1.8.0/bin/stack --help
1.57s user 0.05s system 17% cpu 9.048 total

Static version:

% time /nix/store/2yzcb3idkrgpia8xcpwkr39x61vvvzh5-stack-1.7.1/bin/stack --help
0.01s user 0.01s system 18% cpu 0.089 total

That's a 100x startup difference, and 9 seconds are brutal.

mboes commented 6 years ago

@matthewbauer

We pretty much need to support both in Nixpkgs. I can see some of the benefits of always building statically but I think the advantages to shared linking is much greater.

Could you (re)explain what those are? I can see:

Are there others?

matthewbauer commented 6 years ago

For me, I like being able to see what dependencies a package is using at runtime. With static builds, tools like nix why-depends won’t show your dependencies.

The startup time issue is very concerning though.

Ericson2314 commented 6 years ago

The startup time issue is due to quadratic R(UN)PATH lookup. If we could stop relying on R(UN)PATHs and use absolute paths it would go away. @sphalerite was working on this; Darwin already does it; we could rip a bunch of fragile junk out of ld-wrapper or we did.

For the record I'm for separate all-dynamic and all-static nixpkgs. I don't think Haskell should be a special case, but yes the status quo is untenable.

oxij commented 6 years ago

For the record I'm for separate all-dynamic and all-static nixpkgs. I don't think Haskell should be a special case, but yes the status quo is untenable.

I feel this is a good example why nixpkgs needs use-flags (#12877).

dezgeg commented 6 years ago

All-static nixpkgs isn't viable because a metric ton of packages won't support static-only linkage.

domenkozar commented 6 years ago

For me, I like being able to see what dependencies a package is using at runtime. With static builds, tools like nix why-depends won’t show your dependencies.

I always thought that's exactly why Nix is so cool with static linking, you can always check build time dependency graph and see what were all the inputs for the final executable.

why-depends you can still use if you recompile dynamically, but I don't see how this could be useful for statically linked executables that get stripped down due to code elimination during linking. If the executable does end up depending on something due to Nix, then you'll see it with why-depends anyway.

matthewbauer commented 6 years ago

I always thought that's exactly why Nix is so cool with static linking, you can always check build time dependency graph and see what were all the inputs for the final executable.

That would include build tools though. But it's probably a good estimation

I feel this is a good example why nixpkgs needs use-flags (#12877).

I think overlays can give us everything that use flags could. I originally thought use flags would be the solution but coordinating between packages seems to be too complicated. Instead, we can just have an official static overlay that knows all of the individual package flags. This gives us a lot more power in what we build.

All-static nixpkgs isn't viable because a metric ton of packages won't support static-only linkage.

Maybe a subset of nixpkgs though? I am mainly thinking of "core" libraries here - things that would take a really long time to rebuild if you did it yourself. It could be the equivalent of release-small.nix.

Ericson2314 commented 6 years ago

Yeah that's enough packages so Alpine Linux can exist, so that will do.

dezgeg commented 6 years ago

Really? The first package I checked on their package list (python2) depends on: https://pkgs.alpinelinux.org/contents?branch=edge&name=sqlite-libs&arch=x86&repo=main which contains /usr/lib/libsqlite3.so.0. Doesn't sound very statically linked to me.

matthewbauer commented 6 years ago

Yeah, Alpine is musl-based but uses dynamic linking.

matthewbauer commented 6 years ago

Seems like using UPX and not (re?)compressing is the best way to go for distributing static execs :)

@domenkozar

Since you're using Haskell for everything else, you should definitely look at packaging with Arx. It's an alternative to UPX that is written in Haskell.

Ericson2314 commented 6 years ago

Oh my bad. I thought it was also statically linked. I guess I was thinking of stali Linux or something.

nh2 commented 6 years ago

All-static nixpkgs isn't viable because a metric ton of packages won't support static-only linkage.

@dezgeg Would static-only be required? For me, "all-static nixpkgs" means "libraries provide .a files and executables are statically linked"; if some packages also supply .so files because their build systems don't allow us to turn that off, that seems acceptable to me (sure it bumps closure size unnecessarily a bit but perhaps that can be come by by just deleting the unnecessary files manually?).

Instead, we can just have an official static overlay that knows all of the individual package flags.

@matthewbauer From what I've seen so far, that seems quite reasonable and achievable. Even easier if most/many individual packages can supply a static ? false option (as many already do), as even in normal nixpkgs that is sometimes useful to have.

dezgeg commented 6 years ago

Yes, I think "all-static nixpkgs" even in that form is impossible (or annoyingly hard) to achieve. It's a combination of 1. Some build systems (like CMake) not allowing to compile both static and shared libs at the same time, you only get to choose one. 2. Lots of packages simply not supporting static linking. E.g. native extensions in Python and all those scripting languages will need dlopen(). I checked the Buildroot distribution for numbers, and like 15% of their packages don't support static linkage (I grepped for the following:)

<... etc ...>
package/libgsm/Config.in:comment "libgsm needs a toolchain w/ dynamic library"
package/libhdhomerun/Config.in:comment "libhdhomerun needs a toolchain w/ threads, dynamic library"
package/libhttpparser/Config.in:comment "libhttpparser needs a toolchain w/ dynamic library"
package/libical/Config.in:comment "libical needs a toolchain w/ C++, dynamic library, wchar"
package/libkcapi/Config.in:comment "hasher application needs a toolchain w/ dynamic library"
package/libkrb5/Config.in:comment "libkrb5 needs a toolchain w/ dynamic library"
package/libmicrohttpd/Config.in:comment "libmicrohttpd https support needs a toolchain w/ wchar, dynamic library"
package/libminiupnpc/Config.in:comment "libminiupnpc needs a toolchain w/ dynamic library"
<... etc. for 300 lines ...>
nh2 commented 6 years ago

15% of their packages don't support static linkage (I grepped for the following:)

@dezgeg Can you elaborate a bit more on what that grep / needs a toolchain w/ dynamic library exactly means?

I am confused because libkrb5 needs a toolchain w/ dynamic library -- in https://github.com/NixOS/nixpkgs/pull/43870/files#diff-ec356e56a00da46032d5dfbd16326bd6R30 I pass "--enable-static" "--disable-shared" to krb5 to build static libs and that seems to work fine.

Does the message refer to the build toolchain needing to provide dynlib facilities, but after the build is done, that's not needed any more? If yes, that seems OK to me: It would be annoying but acceptable to have to provide a dynlib capable build toolchain, as long as we can eventually produce static libs/exes for things that build on top of them.

Ericson2314 commented 6 years ago

Even less nicely, for the dlopen()so could provide the SOs but patch ld from resolving them for regular DT_NEEDED entries.

edolstra commented 6 years ago

To be honest, the notion of all-static Nixpkgs fills me with dread, since the number of packages that will need patches or other special handling is likely to be significant (I would guess much worse than say musl support).