は、私はこれを持っていますか?このデータの逆シリアル化が必要です...IO文字列とIOデータ型
1
A
答えて
9
getLine
を文字列として扱おうとしていますが、実行時に文字列を生成するIOアクションのIO String
です。あなたはそれを実行して<-
を使用してdo
ブロック内部から結果の値を得るが、getDataFromUser
以来IOは、その種類はIO SomeData
でなければならないことができます。
getDataFromUser :: IO SomeData
getDataFromUser = do
line <- getLine
return $ read line
より広く、私はIOでのチュートリアルを読んで推薦しますハスケル、あなたのことを学ぶようにハスケルのchapter on IO;それは他のほとんどの言語のIO機能とは非常に異なっており、どのように物事が合うかに慣れるまでに時間がかかることがあります。このような特定の質問に対する答えを完全に理解するのは難しいです:)
7
あなたはHaskell IOがどのように動作するかを詳しく読んで理解する必要があります。
あなたの例にはいくつかの点があります。 read
を使用してSomeData
にデシリアライズする場合は、そのタイプにRead
インスタンスを指定する必要があります。
data SomeData = SomeData Int Int deriving (Read)
第二:あなたはデフォルトのいずれかを使用することができますgetLine
がString
、ないString
返しIO
アクションです。 read
にはString
が必要なので、これがエラーの原因です。これは、あなたが望むものに近いです:
getDataFromUser :: IO SomeData
getDataFromUser = do str <- getLine
return (read str)
これは次のように簡略化されていますが、これについてはあまり心配する前に、上の例を理解していることを確認することができます。
getDataFromUser :: IO SomeData
getDataFromUser = liftM read getLine
関連する問題
- 1. フィルタIO [多分文字列]からIO [文字列]
- 2. java ioのテキストと文字ファイル
- 3. JavaラインIOとC++ IO?
- 4. angle io highchart socket io
- 5. Haskell IO関数 - >型マッチエラー
- 6. Haskellは実際の型IO
- 7. ランダムなIO型のhaskell
- 8. Java実行間のJava文字IO
- 9. IO
- 10. IO [[文字列]]をフラット化する方法は?
- 11. IO文字列を逆転させるHaskell関数
- 12. HaskellでstdoutにIO文字列を書き込む
- 13. テキストファイルから文字列を削除するAndroid - ファイルIO
- 14. HaskellのIOの文字列を入れて
- 15. アンドロイドブラウザとソケットio
- 16. IOチャネルとリーダライタ
- 17. フラスコとソケットio
- 18. Akka IO TCP受信データ
- 19. 同期とIOファイル
- 20. STMと発信IO
- 21. java.lang.NoSuchMethodErrorの:org.apache.commons.io.FileUtils.copyInputStreamToFile(Ljava/IO /のInputStream; Ljava/IO /ファイル;)
- 22. 文字列と浮動小数点を使用したC++ファイルIO
- 23. ハスケルモナディックIO
- 24. エスケープモナドIO
- 25. データ型文字列とC#の文字列との比較
- 26. レガシーC++ IOライブラリと標準化IOライブラリの違い
- 27. IO-APIC-fasteoiとIO-APIC-edgeの相違点
- 28. org.apache.commons:commons-ioとcommons-io:commons-ioの違いは何ですか?
- 29. State MonadはIOと非IOを混在させます
- 30. Haskell: "予想されるIO IO()をIO ThreadIdと一致させることができませんでした"
以下の回答されています "あなたが持っている概念的な問題に対処するという意味で、より多くの助けになりました。しかし、あなたは、「役に立たない」修正、getDataFromUser :: IO SomeDataに興味があるかもしれません。 getDataFromUser = readLn'です。 –