haskellのpureとimpureの違いは何ですか? haskellでIOを実行するとき、純粋なアイテムと不純なアイテムを別々にすることはどういう意味ですか?純粋なものと不純なものとの違いは何ですか?
答えて
基本的にあなたは「不純なセクション」に可能な限り小さなコードを維持したいです。 IOモナドに書かれたコードは、永久に不安定に汚染されています。 IO Int
という記号を持つ関数は、IOモナドの整数を返しますが、核のミサイルを月に送ることができます。私たちはコードのすべての行を調べずに知る方法がありません。
たとえば、文字列を受け取り、 "、dude"という文字列を追加するプログラムを作成したいとします。
main = do
line <- getLine
putStrLn $ line ++ ", dude"
コードの一部は、副作用があるため、IOモナドに存在する必要があります。これには、getLineとputStrLnが含まれます。しかし、2つの文字列をまとめることはできません。
main = do
line <- getLine
putStrLn $ addDude line
addDude input = input ++ ", dude"
addDudeのシグネチャは、それが純粋であることを示します。String -> String
。いいえIO
ここにはありません。これは、addDudeが少なくともそのように動作すると仮定できることを意味します。 1つの文字列を取り、1つの文字列を返します。それが副作用を持つことは不可能です。それは月を爆破することは不可能です。
純度は単に不純な機能から純粋分離なし副作用(ロボットアームを動かし、ディスクからの読み取りなど)を生じない
を意味は、あなたがあなたのコードを実行するために何が起こっているかについての詳細を知ることができることを意味します。たとえば、1 + 2
と言うときは、そのタイプ(Int -> Int -> Int
)で、唯一のことは2つの数字をとり、3番目の数字を生成するということが分かります。タイプがInt -> Int -> IO Int
の場合、2つの数字を追加するたびにロボットアームを動かすことがあります。
ハスケルの基礎のための良い出発場所はここで見つけることができます: http://learnyouahaskell.com/introduction#so-whats-haskell
ハスケルのすべてが純粋です。あなたが読んでいるものは、IO mondadと外部のコードの可能性が高いです。あなたがIOモナドに何かを置くと、決して "脱出"できません - あなたはIOモナドにいなければなりません。したがって、IOモナドはあなたのコードを「侵入」する傾向があります.IOを返すものがあれば、それを呼び出すコードもIOを返さなければなりません。したがって、IOモナドは、プログラムの最上位レベルで必要なところだけで使用し、純粋な関数である計算の任意の部分を分離することが最善です。
- 1. 非純粋関数と純粋関数の違いは何ですか?
- 2. 純粋なレデューサーとは何ですか?
- 3. 純粋な製作とインダイレクションの違い
- 4. 最も高速で純粋なJavascript、Graphビジュアライゼーションツールキットは何ですか?
- 5. 純粋な関数が純粋な意味を返すのは何ですか?
- 6. 最も純粋なオブジェクト指向言語のいくつかは何ですか?
- 7. インタフェースと純粋な抽象クラスのJVM実装の違いは?
- 8. 純粋仮想と仮想の違い
- 9. PyOpenCL vs Clyther vs純粋なOpenCLとC99:初心者にとっては最高のものは何ですか?
- 10. 純粋なパイプと不純なパイプを角2で混合する
- 11. 純粋なSVGとは何ですか?SMILとは何ですか?
- 12. 単純なarr1 = arr2とarr1 = arr2 [:]の違いは何ですか?
- 13. 純粋なブラウザ内JavaScriptテストフレームワークとは何ですか?
- 14. 純粋なJavaScriptチュートリアルとリファレンスは何ですか?
- 15. Python純粋なRMSEとSklearn
- 16. 純粋なhtmlとSignalRログインページ
- 17. ダイナミックサークルプログレスバー純粋なCSSとHTML
- 18. JavaScriptの不純な関数の例とは何ですか?
- 19. 純粋なJavaScriptの
- 20. 純粋なCのクラスに相当するもの
- 21. このドロップダウンの最も単純なJQueryプラグインは何ですか?
- 22. 純粋なPHPのメリットフレームワークとの比較
- 23. 純粋なJavaScriptのフィルタボックスは
- 24. 単純な3列の純粋なCSSレイアウトはありますか?次のことを必要としない
- 25. 最高の、最も単純なajaxファイルアップローダは何ですか?
- 26. C++の最も単純なRTTI実装は何ですか?
- 27. リカレントニューラルネットワークの最も単純なベンチマークは何ですか?
- 28. php&mysqlの最も単純なページングコードは何ですか?
- 29. jQueryの選択と純粋なjavascript
- 30. 読むと、純粋なJavascriptの
これはトリックです! Haskellのすべてが純粋です。何か不潔なものを得るためには、Haskellの外に出なければなりません(ランタイムシステムのように)。 (...しかし、これはあなたのハスケル経験の非常に遅くまで役立つ答えではありません。) –