我能寫一個函數執行IO
作爲它的一個副作用嗎?例如:IO作爲副作用
f :: Int -> Int
f n = putStr "text" >> return n*2
很顯然,我沒有任何的方式來寫,沒有它被完全不正確的代碼,但應該至少說明大致就是我希望做。
我能寫一個函數執行IO
作爲它的一個副作用嗎?例如:IO作爲副作用
f :: Int -> Int
f n = putStr "text" >> return n*2
很顯然,我沒有任何的方式來寫,沒有它被完全不正確的代碼,但應該至少說明大致就是我希望做。
你的功能幾乎是正確的。如果它有副作用,那麼它需要類型IO
。此外,功能應用程序綁定比中綴更緊密。將這些結果修正爲:
f :: Int -> IO Int
f n = putStr "text" >> return (n*2)
你的意思是沒有結果類型是'IO Int'? – sepp2k 2013-02-23 17:38:40
其實這是一個非常好的功能 - 它只是類型'Int - > IO Int',這是一件好事。你的問題是什麼? – delnan 2013-02-23 17:41:41
禁止你想要的是'IO' monad的*特性*。你可以用'unsafePerformIO'作弊,但它不會做你想要的。將簽名更改爲'Int - > IO Int',你會沒事的。 – gspr 2013-02-23 17:43:34