我正在學習在Haskell中使用輸入和輸出。我試圖生成一個隨機數並將其輸出到另一個文件。問題是隨機數似乎返回「IO int」,我無法使用「show」將它轉換爲String。有人能給我一個指針嗎?如何將IO int轉換爲Haskell中的字符串?
回答
如果您向我們展示您編寫的代碼無法正常工作,那麼這很有幫助。
無論如何,你在do
區塊,並寫了類似的東西,是嗎?
main = do
...
writeFile "some-file.txt" (show generateRandomNumberSomehow)
...
而應該做這樣的事情:
main = do
...
randomNumber <- generateRandomNumberSomehow
writeFile "some-file.txt" (show randomNumber)
...
的<-
運營商結合到左邊的Int
值得變量的權值IO Int
的結果。 (是的,您也可以使用它將IO String
值的結果綁定到String
值的變量等。)
此語法只在do
塊內有效。需要注意的是,do
塊本身會產生一個IO值 - 您無法清除IO內存。
非常感謝您的幫助!我花了一整天的時間試圖弄清楚這個> _ <!謝謝!! –
dave4420的答案就是你想要的。它使用的事實是IO
是Monad
;這就是爲什麼你可以使用do
表示法。然而,我認爲值得一提的是,「將函數應用於不是'打開'的值,而是在一些包裝中'實際上比IO
更普遍,比單子更普遍。這是我們的Functor
類。
對於任何仿函數f
(這可能,例如,是Maybe
或[]
或IO
),當你有一定的價值
wrapped :: f t
(例如wrapped :: Maybe Int
),你可以使用fmap
應用功能
t -> t'
它(如show :: Int -> String
)並獲得
wrappedApplied :: f t'
(如wrappedApplied :: Maybe String
)。
在您的例子,這將是
genRandomNumAsString :: IO String
genRandomNumAsString = fmap show genRandomNumPlain
正是我想補充的,是的。 +1。在'IO'中''fmap'非常方便。 – AndrewC
- 1. 將[IO Int]轉換爲Haskell中的IO [Int]?
- 2. 如何在Haskell中將IO [[Int]]轉換爲[[Int]]?
- 3. Haskell IO:將IO字符串轉換爲「其他類型」
- 4. 將字符串轉換爲int,int轉換爲字符串
- 5. 將IO Int轉換爲Int
- 6. 如何將字符串轉換爲int
- 7. 如何將字符串轉換爲Int?
- 8. 如何將字符串轉換爲int?
- 9. 如何將字符串轉換爲int?
- 10. 如何將字符串轉換爲int?
- 11. Haskell:如何將IO(a)轉換爲?
- 12. 將[[Maybe Int]]轉換爲IO()
- 13. 如何將字符串轉換爲Io中的列表?
- 14. 如何將IO對象轉換爲Ruby中的字符串?
- 15. 如何將字符串與int轉換爲字符串與雙?
- 16. haskell將Int列表轉換爲字符串
- 17. Haskell |將Chars和Int轉換爲字符串時出現問題。
- 18. Haskell將[IO字符串]加入IO字符串的方式
- 19. Haskell:將字符串轉換爲句子
- 20. 在Haskell中將Maybe Int轉換爲Int
- 21. 如何將int slice的字符串轉換爲int切片?
- 22. 如何將帶句點字符的字符串轉換爲int?
- 23. 我們如何將布爾轉換爲Haskell中的字符串
- 24. 轉換INT [] []將字符串
- 25. Haskell將Float轉換爲Int
- 26. Haskell將Int轉換爲Floating
- 27. 如何轉換爲int字符串值?
- 28. Haskell的IO(字符串)和字符串
- 29. 將IO字符串轉換爲字符串
- 30. 如何將提醒int值轉換爲字符串(字符)
這並沒有幫助? http://stackoverflow.com/a/2784280/1268844 – Anshu
你試過什麼代碼? – kennytm