首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型制作过程中的转义IO Monad

原型制作过程中的转义IO Monad
EN

Stack Overflow用户
提问于 2014-02-22 15:09:34
回答 2查看 144关注 0票数 3

如何使我的GHCI原型更加健壮?仅仅因为我从文件中读取数据,我就被锁在IO monad中。这是一个有点令人沮丧的是,必须缝纫liftM每次。

代码语言:javascript
复制
λ: let q xml = fmap (filterChildrenName f) $ elChildren xml
λ: liftM q xml
[[Element {elName = QName {qName = "link", qURI = Nothing, qPrefix = Nothing}, elAttribs = [], elContent = [Text (CData {cdVerbatim = CDataText, cdData = "http://planet.haskell.org/", cdLine = Nothing})], elLine = Nothing}]]
λ
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-22 15:28:45

由于gchi在IO中,所以可以使用<-而不是let绑定变量。

代码语言:javascript
复制
xml <- loadFromFile
q xml
票数 13
EN

Stack Overflow用户

发布于 2014-02-25 13:55:28

let<-的主要缺点是在重新加载后丢失所有绑定。要在源文件中使用永久绑定,还可以使用来自unsafePerformIO :: IO a -> aSystem.IO.Unsafe。它在生产代码中是非常不可靠的(只有当您真正知道自己在做什么时--例如,一些低级的优化和黑客操作),但是在原型开发过程中是可以接受的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21956103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档