我正在尝试安装我的第一个脚手架Yesod应用程序。当我运行cabal-dev install && yesod --dev devel
时,它以ExitFailure 1失败。我使用sqlite来执行持久性。
Application.hs:49:44:
No instance for (monad-logger-0.3.1:Control.Monad.Logger.MonadLogger
IO)
arising from a use of `runMigration'
Possible fix:
add an instance declaration for
(monad-logger-0.3.1:Control.Monad.Logger.MonadLogger IO)
In the second argument of `Database.Persist.Store.runPool', namely
`(runMigration migrateAll)'
In a stmt of a 'do' block:
Database.Persist.Store.runPool dbconf (runMigration migrateAll) p
In the expression:
do { manager <- newManager def;
s <- staticSite;
dbconf <- withYamlEnvironment
"config/sqlite.yml" (appEnv conf) Database.Persist.Store.loadConfig
>>= Database.Persist.Store.applyEnv;
p <- Database.Persist.Store.createPoolConfig
(dbconf :: PersistConfig);
.... }
Failed to install testProject-0.0.0
cabal.exe: Error: some packages failed to install:
testProject-0.0.0 failed during the building phase. The exception was:
ExitFailure 1
我尝试按照此处的说明操作:http://www.yesodweb.com/book/scaffolding-and-the-site-template 没有设法找到有关此问题的任何信息。关于什么缺失的任何线索?
答案 0 :(得分:7)
使用Control.Monad.Logger中的runFooLoggingT
个功能之一。特别是runNoLoggingT
。
这可能比将自己固定在旧版本的库中要好得多!
答案 1 :(得分:4)
错误消息显示MonadLogger IO
实例丢失。问题是monad-logger
的已安装版本太新了。您需要monad-logger-0.2.4
includes the instance,monad-logger-0.3.0
及apparently don't以上。
解决方案:
将&& < 0.3.0
添加到您的cabal文件中的monad-logger
行,然后再次cabal install --only-dependencies
。
(如果没有monad-logger
行,请添加, monad-logger < 0.3.0
之类的内容。
答案 2 :(得分:4)
我仍然对变压器感到满意,所以 按照Colin的回答,这是一种完全禁用日志记录的快速方法:
import Control.Monad.Logger (MonadLogger, monadLoggerLog)
import Control.Applicative (pure)
instance MonadLogger IO where
monadLoggerLog _ _ _ = pure $ pure ()
它基本上重新实现了NoLoggingT
的{{1}}实例。
但是,一旦你在代码库上得到这个快速修复,你应该前往Haskell Wiki的Monad Transformers页面,就像我现在正在做的那样; )
答案 3 :(得分:0)
仅供参考,我通过将提供给withSqliteConn
的值作为NoLoggingT
构造函数的参数包装来克服这一点,这允许withSqliteConn
在堆栈中的某处找到MonadLogger
,并且我用runNoLoggingT
mainWithExplicitConnection2:: IO ()
mainWithExplicitConnection2 =
runNoLoggingT $ withSqliteConn ":memory:" $ \conn ->
NoLoggingT $ flip runSqlPersistM conn $ runMigration migrateAll