2014-02-22 3 views
2

내 GHCI 프로토 타이핑을보다 강력하게 만들려면 어떻게해야합니까? 파일에서 내 데이터를 읽었 기 때문에 IO Monad 안에 잠겨 있습니다. 매번 liftM을 꿰매 야하는 것은 다소 실망 스럽습니다. gchi이 IO에 있기 때문에프로토 타이핑 중 IO Monad 탈출

λ: 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

GHCi에서 실행하는 모든 명령을 입출력 모나드로 간주하므로 들지 않아도됩니다. –

+0

당신은 또한'Control.Applicative'을 사용할 수 있습니다. 그것은 fmap ('<$>')에 대한 별칭을 소개합니다.이 별명은 좀 더 멋지게 보이게하고, fmap 대신에 사용할 수있는'<*> '을 소개합니다. – Cubic

답변

12

, 당신은 let<-의 가장 큰 단점은 당신이 다시로드 후 모든 바인딩을 잃을 것입니다 변수

xml <- loadFromFile 
q xml 
0

바인딩하자 대신 <-를 사용할 수 있습니다. 원본 파일에서 영구 바인딩을 사용하려면 unsafePerformIO :: IO a -> aSystem.IO.Unsafe에서 사용할 수도 있습니다. 프로덕션 코드에서는 매우 바람직하지 않습니다 (예를 들어, 사용자가 수행하는 작업 (예 : 저수준 최적화 및 해커 작업)을 알고있을 때만).하지만 프로토 타이핑 중에는 상당히 수용 할 수 있습니다.