0

当我尝试使用此功能加载我的 Heist (0.11) 模板时:

load :: MonadIO n => FilePath -> [(Text, Splice n)] -> IO (HeistState n)
load baseDir splices = do
    tmap <- runEitherT  $ do
        templates <- loadTemplates baseDir
        let hc = HeistConfig [] defaultLoadTimeSplices splices [] templates
        initHeist hc
    either (error . concat) return tmap

我收到此错误:

Couldn't match expected type `EitherT e0 m0 t0'
            with actual type `either-3.1:Control.Monad.Trans.Either.EitherT
                                [String] IO Heist.TemplateRepo'
In the return type of a call of `loadTemplates'
In a stmt of a 'do' block: templates <- loadTemplates baseDir
In the second argument of `($)', namely
  `do { templates <- loadTemplates baseDir;
        let hc
              = HeistConfig [] defaultLoadTimeSplices splices [] templates;
        initHeist hc }'

对我来说,loadTemplate似乎返回了预期的类型,除了用具体类型填充的类型参数。我错过了什么?

4

1 回答 1

1

这种情况发生在安装了同一个包的多个版本的情况下。使用 ghc-pkg 删除除一个版本之外的所有either软件包,然后重新安装并重试。

我一次又一次地对此感到困惑。当类型正确并且您开始认为这是 GHC 错误时,请检查重复的包。

于 2013-02-20T15:04:12.773 回答