ios - 在其他 Monad 中提取 IO 数据

标签 ios haskell monads

我正在使用 HDBC-Sqlite3,我想根据我所在的页面进行查询。我想从 IO Monad 中获取数据。应该可以,因为“得”已经不纯了。通常在 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

问题是我在“做”,其中 Monad 是 ActionM 而不是 IO。

我想过从IO构造一个ActionM,然后使用x <- ... 语法,是不是一个好的解决方案? 我也看到了 liftIO/liftM 的存在,但我也不明白如何/何时使用它。

最佳答案

我不熟悉那个特定的库,但通常会使用 liftIO 将 IO 操作注入(inject)到另一个 monad 中。这确实是您在问题中暗示的内容。

我会尝试类似的东西

get "/" $ do
  x <- liftIO $ quickQuery' conn "SELECT * from definitions" []
  blaze $ Mathskell.Views.Read.render conn

只要外部 monad 有一个 MonadIO 实例,这就应该有效。

关于ios - 在其他 Monad 中提取 IO 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349534/

相关文章:

ios - 当应用程序从 Firebase 实时数据库接收数据时如何显示 UIActivityIndi​​cator

ios - WKWebView 仅垂直滚动而不是水平滚动而不是页面缩放

Haskell QuasiQuotes Text.RawString.QQ 插值

haskell - 如何在 Haskell 函数中将随机数用作 Double ?

c++ - 从 C++ 到 Haskell 类和状态

ios - Storyboard减少 View 之间的差距

ios - 在用户定义的函数中更改单元格的附件 View

haskell - 使用 TypeFamilies 派生实例

haskell - 偏向 Monad 变压器

haskell - 为什么我的 Haskell 中的 gcd 函数仅在返回类型 Writer [String] Int 而不是 Writer String Int 时才起作用?