我正在使用HDBC-Sqlite3,我想根据我所在的页面进行查询。我想从IO Monad中获取数据。它应该是可能的,因为" get"已经不纯洁了。如何在Haskell中完成它?
main = do
conn <- connectSqlite3 "test.db"
scotty 3000 $ do
get "/" $ do
x <- quickQuery' conn "SELECT * from definitions" [] -- Here, how to do it?
blaze $ Mathskell.Views.Read.render conn
问题是我在&#34;做&#34; Monad是ActionM而不是IO。
我考虑过从IO构建ActionM,然后使用x&lt; - ...语法,这是一个很好的解决方案吗? 我也看到了liftIO / liftM的存在,但我也不知道如何/何时使用它。
答案 0 :(得分:2)
我不熟悉那个特定的库,但通常会将一个IO动作注入到liftIO
的另一个monad中。这确实是你在问题中提示的。
我会尝试像
这样的东西get "/" $ do
x <- liftIO $ quickQuery' conn "SELECT * from definitions" []
blaze $ Mathskell.Views.Read.render conn
只要外部monad具有MonadIO
实例,这就应该有效。