現時点では、副作用を純粋な関数型プログラミング言語に統合する次の方法を認識しています。
- 効果システム
- 続き
- ユニークなタイプ
- モナド
モナドは、これを行うための最も効果的で最も一般的な方法であるとよく言われます。
他にどのような方法がありますか? それらはどのように比較されますか?
現時点では、副作用を純粋な関数型プログラミング言語に統合する次の方法を認識しています。
モナドは、これを行うための最も効果的で最も一般的な方法であるとよく言われます。
他にどのような方法がありますか? それらはどのように比較されますか?
モナドよりも一般的なアロー。
私にとって、より一般的な方法は、モナド/コモナドのペアを使用することです。これは、一般的な「モナド」アプローチを一般化します。これは、強力なモナドでのみ機能するため、正しく「強力なモナド」アプローチと呼ばれる必要があります。
モナド/コモナドのペアに移動すると、一部の変数が使用できなくなる効果をモデル化できます。これが役立つ例は、分散設定でスレッドを別のホストに移行する効果です。
歴史的に興味深い追加の方法は、プログラム全体を、入力イベントのストリーム/リストを出力イベントのストリーム/リストにマッピングする関数にすることです。参照:Phil Wadlerによる「命令を宣言する方法」:http ://www.cs.bell-labs.com/~wadler/topics/monads.html#monadsdeclare
最も簡単な方法は、関数間で環境を単純に渡すことです。これは、スキームを教えるためによく使用されます。