如何解决Haskell RIO monad内部永久存在池
相似的问题: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 举报,一经查实,本站将立刻删除。