GHC claims module only available as a boot module when it shouldn't be
<p>I have this dependency graph (ignoring dependencies on third-party modules):</p>

<pre><code>Main:
    GSI.Util
    GSI.Value
    GSI.Result
    GSI.Eval
    GSI.ByteCode
    GSI.Thread
GSI.Main:
    GSI.Value
    GSI.ByteCode
GSI.Thread:
    GSI.Util
    GSI.RTS
    GSI.Value
    GSI.Result
    GSI.Eval
GSI.Eval:
    GSI.Util
    GSI.RTS
    GSI.Value
    GSI.Result
    ACE
GSI.Eval (.hs-boot):
    GSI.Value
ACE:
    GSI.RTS
    GSI.Value
    GSI.ByteCode
    GSI.Result
    {-# SOURCE #-} GSI.Eval
GSI.ByteCode:
    GSI.Util
    GSI.Value
    {-# SOURCE #-} GSI.Thread
GSI.ByteCode (.hs-boot):
    {-# SOURCE #-} GSI.Value
    {-# SOURCE #-} GSI.Thread
GSI.Result:
    GSI.Util
    GSI.RTS
    GSI.Value
GSI.Value:
    GSI.Util
    GSI.RTS
    {-# SOURCE #-} GSI.ByteCode
</code></pre>

<p>(I'd like to cut that graph down further, but I honestly am lost as to which pieces are relevant.  .hs-boot files not listed have no dependencies on my code).  When I do</p>

<pre><code>ghc --make Main.hs
</code></pre>

<p>I get this message:</p>

<pre><code>[10 of 13] Compiling ACE              ( ACE.hs, ACE.o ) [GSI.ByteCode changed]
module GSI.Thread cannot be linked; it is only available as a boot module
</code></pre>

<p>What on earth?  I'm importing GSI.Thread not as a boot module from Main, so how can GHC claim it's only available as a boot module?  (And, for that matter, why can't GHC just detect this situation and include the non-boot module automatically?)</p>