Skip to content

GHCI always reloads hs-boot file

Summary

ghci :reload seems to always reload .hs-boot files even if they had no changes since last reload

Steps to reproduce

Looks like it is reproducible with any setup containing hs-boot files. Open ghci, load a file with :load, then :reload and see that hs boots are reloaded.

Here is a simple reproducer with ghc 9.4.4:

file Bar.hs:

module Bar where

import Foo

file Bar.hs-boot:

module Bar where

file Foo.hs:

module Foo where

import {-# SOURCE #-} Bar

Start ghci and run :load followed by multiples :reload:

GHCi, version 9.4.4: https://www.haskell.org/ghc/  :? for help
ghci> :l Bar.hs
[1 of 3] Compiling Bar[boot]        ( Bar.hs-boot, interpreted )
[2 of 3] Compiling Foo              ( Foo.hs, interpreted )
[3 of 3] Compiling Bar              ( Bar.hs, interpreted )
Ok, three modules loaded.
ghci> :reload
[1 of 3] Compiling Bar[boot]        ( Bar.hs-boot, interpreted ) [Missing object file]
Ok, three modules loaded.
ghci> :reload
[1 of 3] Compiling Bar[boot]        ( Bar.hs-boot, interpreted ) [Missing object file]
Ok, three modules loaded.
ghci> :reload
[1 of 3] Compiling Bar[boot]        ( Bar.hs-boot, interpreted ) [Missing object file]
Ok, three modules loaded.

Everytime the Bar.hs-boot file seems to be reloaded with the Missing object file reason.

Expected behavior

It should not reload if the file did not change, looks like wasted time. I suspect that some long reload time I'm observing with haskell-language-server may be caused by this.

Environment

  • GHC version used: GHC 9.4.4.

Note that GHC 9.2.4 does not seem impacted, or at least, it does not show the debug messages:

GHCi, version 9.2.4: https://www.haskell.org/ghc/  :? for help
ghci> :l Bar.hs
[1 of 3] Compiling Bar[boot]        ( Bar.hs-boot, interpreted )
[2 of 3] Compiling Foo              ( Foo.hs, interpreted )
[3 of 3] Compiling Bar              ( Bar.hs, interpreted )
Ok, three modules loaded.
ghci> :r
Ok, three modules loaded.

Optional:

  • Operating System:
  • System Architecture:
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information