Regression in forall typechecking
The following bug showed up when trying to install ghc-mod against the current ghc-7.10 branch
Ths code below, from https://github.com/DanielG/ghc-mod/blob/b52c0a5d767282369f2748c5ec070b802ed8e23c/Language/Haskell/GhcMod/Monad/Types.hs#L346
instance (MonadBaseControl IO m) => MonadBaseControl IO (GhcModT m) where
type StM (GhcModT m) a =
StM (StateT GhcModState
(ErrorT GhcModError
(JournalT GhcModLog
(ReaderT GhcModEnv m) ) ) ) a
liftBaseWith f = GhcModT . liftBaseWith $ \runInBase ->
f $ runInBase . unGhcModT
restoreM = GhcModT . restoreM
{-# INLINE liftBaseWith #-}
{-# INLINE restoreM #-}
Which compiles fine with GHC 7.10.1 now has the error
Language/Haskell/GhcMod/Monad/Types.hs:346:13:
Couldn't match expected type ‘StateT
GhcModState
(ErrorT GhcModError (JournalT GhcModLog (ReaderT GhcModEnv m)))
a1
-> IO (StM m (Either GhcModError (a1, GhcModState), GhcModLog))’
with actual type ‘forall a2.
StateT
GhcModState
(ErrorT GhcModError (JournalT GhcModLog (ReaderT GhcModEnv m)))
a2
-> IO
(StM
(StateT
GhcModState
(ErrorT
GhcModError
(JournalT GhcModLog (ReaderT GhcModEnv m))))
a2)’
Relevant bindings include
runInBase :: forall a.
StateT
GhcModState
(ErrorT GhcModError (JournalT GhcModLog (ReaderT GhcModEnv m)))
a
-> IO
(StM
(StateT
GhcModState
(ErrorT GhcModError (JournalT GhcModLog (ReaderT GhcModEnv m))))
a)
(bound at Language/Haskell/GhcMod/Monad/Types.hs:345:48)
f :: RunInBase (GhcModT m) IO -> IO a
(bound at Language/Haskell/GhcMod/Monad/Types.hs:345:18)
liftBaseWith :: (RunInBase (GhcModT m) IO -> IO a) -> GhcModT m a
(bound at Language/Haskell/GhcMod/Monad/Types.hs:345:5)
In the first argument of ‘(.)’, namely ‘runInBase’
In the second argument of ‘($)’, namely ‘runInBase . unGhcModT’
A laborious git bisect tracked it down to
681d82c0d44f06f0b958b75778c30b0910df982b is the first bad commit
commit 681d82c0d44f06f0b958b75778c30b0910df982b
Author: Simon Peyton Jones <simonpj@microsoft.com>
Date: Tue Apr 7 14:45:04 2015 +0100
Look inside synonyms for foralls when unifying
This fixes Trac #10194
(cherry picked from commit 553c5182156c5e4c15e3bd1c17c6d83a95a6c408)
:040000 040000 1f0e62661ed1c48a9cbfab72ca3e38bb9e501412 ef6786fdb952d3446121b27b56f6103533d52356 M compiler
:040000 040000 d607f1bff94578b0677df9cba01371dad6b26a32 ac715cec4fd8d43a53ecee132eae2b4c0c65e31a M testsuite
Trac metadata
Trac field | Value |
---|---|
Version | 7.10.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | high |
Resolution | Unresolved |
Component | Compiler (Type checker) |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |