<div dir="ltr">Hi,<div><br></div><div>I'd recommend investigating using stack rather than cabal directly for this. Stack is good for a situation where you need to split things up into more than one .cabal file, and should be able to handle handle the dependencies between the modules without getting itself in a twist.</div><div><br></div><div>By way of a non-solution, I'd also strongly recommend (from experience) not letting bitrot take hold over the course of the year and then putting all the effort in at the end to clean it all up at the end. If you're struggling to keep the Tax module in sync with the rest of the system, then that often indicates your dependencies are not quite right. For instance, it seems suspicious that tax calculations know anything about persistence.</div><div><br></div><div>Hope that helps,</div><div><br></div><div>David</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 10 September 2015 at 19:26, Dimitri DeFigueiredo <span dir="ltr"><<a href="mailto:defigueiredo@ucdavis.edu" target="_blank">defigueiredo@ucdavis.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Yes, it's the classic diamond dependency graph.<br>
      A<br>
     / \<br>
    B  C<br>
     \ /<br>
      D<br>
    <br>
    A = Trader, B = ProfitCalculator, C = Persistence, D = MarketModel.<br>
    It is not that I *want* Trader (A) to depend on two different
    versions of MarketModel (D), that is just a consequence. I don't
    have a choice.<br>
    <br>
    What I want is for the ProfitCalculator (B) and Persistence (C) to
    always build. And if an update changes the MarketModel (D) from
    underneath them, they might break. So, I want them to each lock-in a
    specific version. In effect, I am forcing the graph above to turn
    into something like.<br>
        A<br>
       / \<br>
      B  C<br>
     /     \<br>
    D       D' <br>
    <br>
    I may not write any code that uses the MarketModel (D) directly on
    the Trader (A).<br>
    I do understand that there are at least 1 point to keep in mind:<br>
     types defined in D will be different from those in D' (typeclasses
    will be defined twice)<br>
    <br>
    But the benefit of *not* having to always keep everything building
    on the latest version every time I update the MarketModel (D) is
    huge for me!<br>
    <br>
    <br>
    Cheers,<br>
    <br>
    <br>
    Dimitri<br>
    <br>
    <br>
    <br>
    <div>Em 10/09/15 06:50, timmy tofu escreveu:<br>
    </div>
    <blockquote type="cite"><div><div class="h5">
      <div dir="ltr">
        <div class="gmail_extra">
          <div class="gmail_quote">
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              Using the 'cabal sandbox add-source' solution now requires
              that I<br>
              "add-source" the MarketModel package too. Otherwise, any
              change I make<br>
              to this package will not be tracked.<br>
            </blockquote>
            <div><br>
              then…<br>
               <br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              Cabal sets the paths for "import"ed<br>
              modules in the "hs-source-dirs:" and that is global to the
              whole<br>
              package.<br>
            </blockquote>
            <div><br>
               I can't tell if you do or do not want ProfitCalculator
              and Persistence to track changes made in MarketModel.<br>
              <br>
              If you do, and both should be in lock-step with it (unlike
              your situation with Tax), then you don't have a problem.<br>
              <br>
              If not, then the problem is Trader would depend on
              ProfitCalculator which might depend on a different version
              of MarketModel than Persistence (upon which Trader also
              depends). That is a classic dependency problem and not a
              function of submodules or add-sourcing, per se. The Trader
              module seems to be at the top of this heap - why would you
              want the Trader to (indirectly) use one version of
              MarketModel through ProfitCalculator, and another through
              Persistence?<br>
              <br>
            </div>
          </div>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <br>
      </div></div><span class=""><pre>_______________________________________________
Haskell-Cafe mailing list
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
</pre>
    </span></blockquote>
    <br>
  </div>

<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>