问题描述
相似的问题:Haskell / Persistent-Sqlite: "No instance for (Control.Monad.Trans.Resource.MonadResource IO)"
我正在尝试使用selectSource
中的persistent
以流模式读取数据库,并使用logInfo
在控制台中记录值。
以下片段在RIO项目模板中执行。
以下代码包含有效和无效的部分。
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE GeneralizednewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
module disambiguate.People where
import Data.Conduit
import qualified Data.Conduit.List as CL
import Database.Persist
import Database.Persist.sqlite
import Database.Persist.TH
import Import hiding (on,(^.))
import Prelude (print)
share [mkPersist sqlSettings,mkMigrate "migrateall"] [persistLowerCase|
Person
name String
age Int
deriving Show
|]
disambiguatePeople :: RIO App ()
disambiguatePeople = do
-- WORKS!
runsqlite ":memory:" insertAndRead
-- DOES NOT COMPILE!
withsqlitePool ":memory:" 1 $ \pool -> do
liftsqlPersistMPool insertAndRead pool
where
insertAndRead = do
runMigration migrateall
insert_ $ Person "John Doe" 35
insert_ $ Person "Jane Doe" 50
runconduit $ selectSource [PersonAge >. 5] [] .| CL.mapM_
(lift . logInfo . displayShow)
我收到以下错误:
src/Run.hs:37:25: error:
• Couldn't match type ‘RIO App’ with ‘IO’
Expected type: ReaderT
sqlBackend
(monad-logger-0.3.35:Control.Monad.Logger.NoLoggingT
(Control.Monad.Trans.Resource.Internal.ResourceT IO))
()
Actual type: ReaderT
sqlBackend
(monad-logger-0.3.35:Control.Monad.Logger.NoLoggingT
(Control.Monad.Trans.Resource.Internal.ResourceT (RIO App)))
()
• In the first argument of ‘liftsqlPersistMPool’,namely
‘insertAndRead’
In a stmt of a 'do' block: liftsqlPersistMPool insertAndRead pool
In the expression: do liftsqlPersistMPool insertAndRead pool
|
37 | liftsqlPersistMPool insertAndRead pool
| ^^^^^^^^^^^^^
由于函数liftsqlPersistMPool
对IO
类型进行了硬编码,因此我理解该错误。
如何解决此问题以将其与RIO
类型一起使用?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)