6

私はHaskellを学び始めたばかりです。それは純粋な関数型言語であり、その中のすべてが不変であることを読みました。したがって、入出力、データベースの書き込みと読み取りなどは、状態の可変性を引き起こします。Haskell にはモナドと呼ばれるものがあり、Haskell の命令型機能を使用できるようになっていることは知っていますIO Monad。しかし興味深いのは、Haskell で必須のすべてがモナドの助けを借りて実装されているということですか? HackageDB には、3D グラフィックス、データベース、HTML の解析、Web サーバーの作成などを処理できるパッケージが多数あります。

このすべての背後にある一般的な考え方は何ですか? Haskell が純粋なままであると同時に、これをすべて書くのに適用できるのはなぜでしょうか? 誰かが私にこれを明確にしてくれることを願っています。前もって感謝します!

4

4 に答える 4

8

それは純粋な関数型言語であり、その中のすべてが不変であることを読みました。

Haskell は /デフォルトで純粋なだけです。特定の効果が必要であることを (モナド型を介して) コンパイラーに宣言すると、それらが有効になります。

デフォルトではオンになっていません。

于 2013-04-05T13:25:31.480 に答える
3

Haskell では、実際には何も実行しません。IO アクションを組み合わせてやりたいことの説明を作成し、その説明を main に割り当てるだけです。次に、コンパイラは、メイン変数で見つかったプログラム記述を実行可能コードに変換します。

私が書いたこのHaskell IO の紹介を読むことをお勧めします。

ただし、これは IO アクションを組み合わせる方法を説明しているだけで、新しいアクションを導入する方法は説明していません。Haskell には、新しい IO アクションを追加する 2 つの方法があります。

  • コンパイラの組み込み
  • 外部関数インターフェイス (FFI)

次に、IO モナドが行うことは、これらの基本的な IO アクションをより大きな IO アクションに結合することだけです。

于 2013-04-05T16:22:20.410 に答える