ここ数年、命令型開発者として、関数型プログラミングを学びたいと思ったことはありませんでした。
数ヶ月前、ついにHaskellを学ぶことにしました。とてもクールな言語ですが、イベント駆動型の実際のアプリがそのような言語でどのようにプログラミングされるのか、私は困惑しています。それについての良いチュートリアルを知っていますか?
注:「実際のアプリ」と言ったとき、私は実世界の製品版アプリのことではありません。私はそれを理解するための小さなサンプルアプリを意味します。 Windows caculatorの簡略化されたバージョンのようなものが素晴らしいと思いますが、おそらくもう少し複雑なものになるでしょう。
「実世界」の例を言うとき、あなたはおそらく本質的にシーケンシャルまたはステートフルであるか、または大量のI/Oをする問題について考えているでしょう?
それで、ゲームはどうですか?
または、 X Window Manager 、拡張可能な Emacsクローンテキストエディター 、または [〜#〜] ide [〜#〜] はどうですか?
次に、タイトルにすでに質問が含まれている本があります。 Real World Haskellandこれも 無料で入手可能 です。
あなたが見たいかもしれないもう一つは、 Functional Reactive Programming です。 (たとえば、Fragで使用されます。)FRPの興味深い点は、たとえばGUIプログラミングの問題を非常に異なる角度から見ることができることです。 RWHブックのGUIの章を読むと、C言語と同じようにGUIアプリケーションを作成する方法が説明されていることがわかります。 FRP OTOHを使用すると、Cでは完全に異なるとは言えない方法でpossibleと書くことができます。
誰かが「しかしHaskellは現実の世界で使用できるのか」と言うとき、何度も(これはあなたの質問に当てはまるとは言いませんが、繰り返し発生するパターンです)、彼らは本当に「Cでこれを行う方法を知っており、Haskellではまったく同じ方法でそれを行うことはできないため、Haskellでは不可能である必要があるため、Haskellは現実の世界の準備ができていません」と述べています。しかし、彼らが見落としているのは、問題を解決するための完全に異なるはるかに良い方法があるかもしれないということです。 (これは、「Erlangにはスレッドがないため、並行システムの実装に使用できない可能性がある」のようなものです。)そして、FRPは一例にすぎません。
稲妻の話 の今日、私はこのショーケースのHaskellアプリケーションのリストを組み立て、プログラマーのみを対象とするものは意図的に除外しました:
(また、 私のブログ 、およびトークの スライドで紹介されています 、各プログラムのニースの代表的な写真。)
xmonadはイベント駆動型(文字通り)です。イベントでウェイクアップし、Xサーバーをモデル化する内部状態を変更するリスナーループがあり、それが画面にレンダリングされます。
Haskellで書かれたこのircボットを見つけたことがあります。
ここにあなたが要求したいくつかのリンクがあります。
これは、Haskellについて命令型プログラマーにとって「意味をなさない」多くのことを説明しています
これは非常にわかりやすいチュートリアルです
Haskellで書かれたレイトレーサー
こちらからグラスゴーハスケルコンパイラをダウンロードできます。 [〜#〜] ghc [〜#〜]
あなたはチェックアウトする必要があります Real World Haskell 。この本は無料で入手でき、Haskellを実際の問題に適用する方法を示しています。チュートリアルがはるかに包括的であるため、チュートリアルとは呼びません。
チェックアウト 関数型反応プログラミング 。