我有以下功能:如何從IO動作正常值在Haskell
get :: Chars -> IO Chars
get cs = do
char <- getChar
let (dats, idx) = (curData cs, curIndex cs)
let (x,y:xs) = splitAt idx dats
let replacement = x ++ (ord char) : xs
return $ Chars replacement idx
,我想獲得一個Chars
出來,不一個IO動作。我有沒有想法如何做到這一點,或者如果它甚至是可能的。
Chars基本上只是一個容器,名爲curData的[Int]
和名爲curIndex的Int
。細節並不重要,我只想知道是否有這種功能返回Chars
而不是IO Chars
的方法。
如果不是,我該如何將此作爲參數傳遞給需要Chars
的函數?我對Haskell IO很陌生,但我不認爲我需要所有以Chars
作爲參數的函數,而不得不以IO Chars
作爲參數,然後提取並重新打包它們。這似乎沒有必要。
謝謝!
難道我們沒有一個規範的「我如何獲得一個'了'出'IO了'的?「這個問題是重複的嗎? – 2012-07-13 12:08:53
這裏有太多內容豐富的答案,沒有足夠的可愛的貓咪圖片,所以我只想在這裏留下這個:http://spl.smugmug.com/Humor/Lambdacats/ trapd-in-IO-monad-plz-help/960526421_MnNqB-S-1.jpg – rtperson 2012-07-13 13:22:07