GHCi accepts invalid programs when recompiling
This ticket may or may not be a duplicate of #9729, but I ran into it again in a different context, so I'm reporting it. My GHC version is 7.10.2.20151030. The example is as minimal as I could make it.
File Bar.hs
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}
module Bar where
class Bar a b where
(*^) :: a -> b -> b
File Foo.hs
{-# LANGUAGE MultiParamTypeClasses #-}
module Foo where
import Bar
import GHC.Prim
newtype Foo fp = Foo [fp]
instance {-# OVERLAPS #-}
Bar (Foo fp) [fp]
File Main.hs
{-# LANGUAGE MultiParamTypeClasses #-}
import Foo
import Bar
newtype LW a = LW [a]
instance Bar (Foo fp) (LW fp) where
r *^ (LW xs) = LW $ r *^ xs
If I start GHCi with ghci Main, everything compiles as it should. Then I remove the {-# OVERLAPS #-} pragma in Foo.hs, which should break Main.hs. But GHCi happily recompiles with :r.
A couple of notes: *with* the pragma, :i Bar gives the instances
instance Bar (Foo fp) (LW fp) -- Defined at Main.hs:8:10
instance Bar a b => Bar a [b] -- Defined at Bar.hs:8:10
instance [overlap ok] Bar (Foo fp) [fp] -- Defined at Foo.hs:22:3
while after (successfully, but incorrectly) recompiling without the pragma, I get the instances
instance Bar (Foo fp) (LW fp) -- Defined at Main.hs:8:10
instance Bar a b => Bar a [b] -- Defined at Bar.hs:8:10
instance Bar (Foo fp) [fp] -- Defined at Foo.hs:22:3
(i.e., without the [overlap ok]).
Another strange thing is that the bug is only triggered if I import specific (superfluous) modules in Foo.hs. For example, if I replace GHC.Prim with Control.Monad or Data.Maybe, the bug is not triggered (i.e., GHCi correctly detects when I remove the pragma).
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.10.2-rc2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | GHCi |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |