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を使用して、パッケージの1つのバージョンを除くすべてを削除してからeither、再インストールして再試行してください。

私は何度も何度も戸惑いました。タイプが正しく、GHCのバグだと思い始めたら、パッケージが重複していないか確認してください。

于 2013-02-20T15:04:12.773 に答える