http://www.haskell.org/haskellwiki/State_Monadの具体例は、実際のコードをどのようにモナドで書くかを理解するのに非常に役立ちます(stackoverflow/9014218も参照してください)。しかし、私たちのほとんどはOOバックグラウンドから来ているので、OOプログラムをhaskellにマッピングすると、同等のhaskellコードを書く方法を示すのに役立ちます。 (はい、2つのパラダイムは全く異なっており、OOスタイルのコードを直接haskellに変換するのは賢明ではありませんが、チュートリアルとして一度だけです。)OOスタイルのコードを模倣するためのhaskellモナシ
ここではOOスタイルのコードを使用して、オブジェクトのインスタンスを作成し、それぞれのメンバ変数を変更するメンバ関数を呼び出し、最後にそれらを出力します。私たちはこれをhaskell stateのモナドを使ってどのように書きますか?
class A:
int p;
bool q;
A() { p=0; q=False;} // constructor
int y() { // member function
if(q) p++; else p--;
return p;
}
bool z() { // member function
q = not q;
return q;
}
main:
// main body - creates instances and calls member funcs
a1 = A; a2 = A; // 2 separate instances of A
int m = a1.y();
m = m + a1.y();
bool n = a2.z();
print m, n, a1.p, a1.q, a2.p, a2.q;
私はOOが本当に状態のモナドとはあまり関係ないと思います。状態モナドは状態(思考変数)のためのものです。 OOはカプセル化と多態性のためのものです(モジュールとタイプクラスを考えてください) – hugomg
@Rog:http://homepages.cwi.nl/~ralf/OOHaskell/paper.pdfを見ましたか? – Landei
ありがとうございます。優れた用紙。 – R71