Haskell とのネットワーキングの例を探しながら、http://therning.org/magnus/archives/698を横断できます。それはおそらく、あるのと同じくらい単純な例です。
これをテンプレートとして使用でき、機能しますが、セマンティクスとコードがどのように評価されるかを完全には理解していません。ブロックが常に評価されるのを妨げているのは怠惰であることはわかりますが、forever $ do
ブロックが評価されることを強制するものは何ですか?
Haskell とのネットワーキングの例を探しながら、http://therning.org/magnus/archives/698を横断できます。それはおそらく、あるのと同じくらい単純な例です。
これをテンプレートとして使用でき、機能しますが、セマンティクスとコードがどのように評価されるかを完全には理解していません。ブロックが常に評価されるのを妨げているのは怠惰であることはわかりますが、forever $ do
ブロックが評価されることを強制するものは何ですか?
怠惰はここでは何の関係もありません。そして、サブジェクトを「防ぐ」ものは何もありませんforever $ do
-ブロックも何からも。while (true)
これは無限に評価されます。実際、一般的な命令型言語の類似物として見ることができます。このサーバーの実装はaccept serv_sock
、プログラムが接続を待機する関数呼び出しを中心に展開するため、接続をforever
受信するまでループの実行を同期的にブロックし、それに対して想定されていることを実行してから、再びループします。
すべてが標準の命令型プログラムに非常によく似ているように見えるかもしれませんが、違いは、コンピューターにすべての式で何をすべきかを伝える代わりに、他の命令から命令を構成していることです。main
したがって、関数定義を単一の複合命令として見ることができます。
main
評価をトリガーするのは、この命令に名前と型シグネチャを割り当てるという事実ですIO ()
(あなたの場合は推測されました)。これにより、Haskell コンパイラに、この命令をプログラムのエントリ ポイントとして扱い、プログラムの起動時にそこから評価を開始するように指示します。