您好我是Haskell的新手,我一直在使用Scotty和Sqlite开发一个小型Web应用程序。
我在Scotty Actions中执行Sqlite操作时遇到问题。 当单独使用时,我会理解这两个库。
这是我的代码的MVP
script
所以你可以看到我仍然坚持认为太强迫。 我知道帖子的类型是ActionM() - > ScottyM() 我知道关闭数据库的类型是IO()
所以我认为我需要的是一个复合函数 ActionM() - > IO() - > ScottyM() 我只是不确定如何写这个。
这是在正确的轨道上吗?
非常感谢任何建议。
答案 0 :(得分:4)
Monads堆栈(技术上,Monad Transformers堆栈)。这意味着在一些高级monad中,可以在堆栈中进一步使用更基本的monad。
lift
函数将从堆栈中的一个级别获取一个函数,并且#34;提升"它进入当前的一个。 liftIO
函数将采用通用IO函数并将其提升到当前上下文中。 (IO,如果包含它,则始终是Monad Transformer堆栈的底部)
Real World Haskell和Haskell Wiki都有关于Monad变形金刚的好章节。