デイブはいくつかの優れた点に言及していますが、Haskellが両方の問題を解決したことを指摘する必要があります。ステートレス性は、Stateモナドを使用してバイパスすることができ(EDIT:実際ではありません-詳細は以下を参照)、IOモナドを使用してシーケンスを処理できます(EDIT:またはその他のモナド、その点で...)。
あなたが抱える課題(そして、私はゲームプログラミングとHaskellの両方を学ぼうとしていました)は、これらの方針に沿ったものです。(これらはすべてHaskell固有のものです。私はまだ他のFP言語に深く関わっていないためです。)
- FP学習曲線: FPでは、反復プログラミングから考え方を完全に変える必要があります。ループではなくマップとフォールドの観点から考えることを学ぶには、慣れていない場合はメンタルトレーニングが必要です。
- Mathyの学習曲線: Haskellは、デザイナーの数学的な洗練に恵まれ、呪われています。FPの基本を学習した後、モナド、射、矢、その他の多くの考慮事項に固執しているためです。それ自体は非常に抽象的なものです。
- モナド:これらの子犬は、特に「関数構成を関数呼び出しの順序付けを強制する方法に変えるハック」であるというエリック・レイモンドの声明を受け入れた場合、あなたの心を包むのは特に難しくありません。残念ながら(これはHaskellの人気が高まるにつれて良くなっていますが)、モナドの多くの説明は、ほとんどのプログラマーの頭上を狙っています(「エンドファンクターのカテゴリーのモノイドです!」)、またはまったく役に立たないアナロジー(例えば、 、ブレントYorgeyの痛ましい正確たとえば、「モナドはブリトーのようなものです!」あなたは、彼は冗談だと思いますか?誰もが今までのチュートリアルでは、このような間抜けなアナロジーを思い付くことができなかったこと?もう一度考えてみて。)
- エコシステム:道路の他のすべての段差を乗り越えることができた場合、まだ大部分は実験的な言語で作業するという現実的な日々の現実に気付くでしょう。あなたがここに着いたとき、神はあなたを助けます。ここで、Scala、F#、または他のライブラリとの相互運用性が少なくともある程度保証されている他の言語を真剣に探し始めました。むかし、私はHaskellにWindowsのOpenGLライブラリをリンクしてロードさせました。それは私をかなり気分が良くした。その後、OpenGLバインディングが再リリースされ、私がやったことすべてを壊しました。それがハスケルランドでの生活です。正直なところ、それは痛みになる可能性があります。Bulletエンジンのラッパーが必要ですか?Hackageにあります- 放棄されたウェアとして昨年の11月から。Ogre3dが好きですか?ハッキングには、ライブラリのサブセットのみへのバインディングがあります。要するに、ゲーム開発のbeat地から離れた言語に固執すると、群れを追ってC ++に固執した場合よりも、基本的な配管作業に多くの時間を費やすことになります。
これの裏側は、物事が急速に改善されているということです。そして、それは本当にあなたが経験から何を望んでいるかに依存します。ゲームを構築し、それをあなたのウェブサイトに載せて名声と富を求めたいですか?C ++またはPythonに固執します。しかし、プロセスを革新する必要がある新しい何かを学びたい場合は、関数型言語を試してください。あなたが学習している間、自分自身に多くの忍耐を持っているだけです。
Antti Salonenには、Haskellのゲームプログラミングとの関係を詳しく述べた興味深いブログがあります。読む価値があります。
編集(1年後):状態モナドをさらに研究したので、特定の機能の外に永続化することを目的とする状態のソリューションとしてはあまり良いとは言えません。ステートレスの本当の解決策は、IOVar、ST、MVar(スレッドセーフティ用)のHaskell、または開発者から隠されている内部状態を管理するためにArrowsとFRPを使用するYampaのようなものを通じて見つかります。(このリストは難易度順になっていますが、最初の3つはモナドを理解すれば特に難しくありません。)