如何让GHCI原型设计更加强大?因为我从文件中读取数据,所以我被锁定在IO monad中。每次缝合liftM
都有点令人沮丧。
λ: 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}]]
λ
答案 0 :(得分:13)
由于gchi在IO中,您可以使用<-
而不是让绑定变量
xml <- loadFromFile
q xml
答案 1 :(得分:0)
let
和<-
的主要缺点是重新加载后会丢失所有绑定。要在源文件中使用永久绑定,您还可以使用unsafePerformIO :: IO a -> a
中的System.IO.Unsafe
。它在生产代码中非常不合适(只有当你真正知道你做了什么 - 例如一些低级优化和hackery时),但在原型设计过程中是完全可以接受的。