<div dir="ltr">The logic has *lots* of additional complications; Haskell isn't C. <a href="https://wiki.haskell.org/Shared_libraries_and_GHC">https://wiki.haskell.org/Shared_libraries_and_GHC</a> isn't quite about this (shared libraries have even more complications), but has a reasonable overview.<div><br></div><div>Hypothetically, this specific case *could* be handled better. But it doesn't come up often enough, and the whole thing is tangled enough that it's only very recently that ghc's dependency handling started to play along well with nix's idea of how things work, much less anything trickier.</div><div><br></div><div>Although this might be one of the rare cases where -split-objs could be worth the cost (-split-sections is generally preferred with recent ghc, but wouldn't help with this specific case).</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 29, 2018 at 1:09 AM, ☂Josh Chia (謝任中) <span dir="ltr"><<a href="mailto:joshchia@gmail.com" target="_blank">joshchia@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>In my project, I have multiple packages. One of the packages, packageA, is very fundamental and depended on directly and indirectly by almost all the other packages. It has functions that use some hard-coded data (a ByteString top-level variable) also defined within packageA.</div><div><br></div><div>This hard-coded data is appended regularly, causing packageA to be rebuilt and thus almost all the other packages to be rebuilt, and building takes a painfully long time. I know I can move this hard-coded data to a file that's read at run-time, but that means one more item to plumb in at run-time (where to find the file), and IO (preventing the functions from being pure), so I would like to keep it hard-coded.</div><div><br></div><div>Is there an elegant way to prevent or minimize the cascading rebuild of the dependent packages just because the hard-coded data in packageA changed?</div><div><br></div><div>For analogy, in C or C++, source code gets compiled to .o files, one for each .cpp source file. Multiple .o files get linked into executables. So, unless the interface (.hpp files) also change, an implementation (.cpp file) change does not cause dependents to be recompiled to get new .o files, although dependent executables get relinked. I'm not familiar with the compilation and linking logic in GHC so maybe it has additional complications.</div><div><br></div><div>BTW, I'm using stack, in case it makes any difference to the nature of the problem.</div><span class="HOEnZb"><font color="#888888"><div><br></div><div>Josh</div></font></span></div>
<br>______________________________<wbr>_________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
Only members subscribed via the mailman list are allowed to post.<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div>