ghc-mod ожидает, что MonadBaseControl будет иметь связанный с StM новый тип вместо связанного с StT
Я получаю эту ошибку при установке последней версии ghc-mod (5.2.1.1) из Hackage в песочницу:
[15 of 38] Compiling Language.Haskell.GhcMod.CabalConfig ( Language/Haskell/GhcMod/CabalConfig.hs, dist/dist-sandbox-94286619/build/Language/Haskell/GhcMod/CabalConfig.o )
[16 of 38] Compiling Language.Haskell.GhcMod.CabalApi ( Language/Haskell/GhcMod/CabalApi.hs, dist/dist-sandbox-94286619/build/Language/Haskell/GhcMod/CabalApi.o )
[17 of 38] Compiling Language.Haskell.GhcMod.Cradle ( Language/Haskell/GhcMod/Cradle.hs, dist/dist-sandbox-94286619/build/Language/Haskell/GhcMod/Cradle.o )
[18 of 38] Compiling Language.Haskell.GhcMod.Monad ( Language/Haskell/GhcMod/Monad.hs, dist/dist-sandbox-94286619/build/Language/Haskell/GhcMod/Monad.o )
Language/Haskell/GhcMod/Monad.hs:370:5:
Wrong category of family instance; declaration was for a type synonym
In the newtype instance declaration for ‘StM’
In the instance declaration for ‘MonadBaseControl IO (GhcModT m)’
cabal: Error: some packages failed to install:
ghc-mod-5.2.1.1 failed during the building phase. The exception was:
ExitFailure 1
Я никогда не видел эту ошибку раньше, поэтому я пошел копать. В Language/Haskell/GhcMod/Monad.hs
Конечно, он делает что-то смешное:
instance (MonadBaseControl IO m) => MonadBaseControl IO (GhcModT m) where
newtype StM (GhcModT m) a = StGhcMod {
unStGhcMod :: StM (StateT GhcModState
(ErrorT GhcModError
(JournalT GhcModLog
(ReaderT GhcModEnv m) ) ) ) a }
liftBaseWith f = GhcModT . liftBaseWith $ \runInBase ->
f $ liftM StGhcMod . runInBase . unGhcModT
Если вы посмотрите на монад-контроль на Hackage, то такого нет StM
связанный новый тип, но только StT
связанный тип.
Если здесь не происходит какой-то другой обман, я в тупике. Как бы это исправить? Спасибо.
1 ответ
Решение
Поцарапайте это, мои глаза меня обманывают. Моя ошибка, начиная с monad-control-1.x, MonadControl имеет связанный тип вместо связанного типа данных, как объяснено здесь.