web-dev-qa-db-ja.com

実世界のHaskellプログラミング

ここ数年、命令型開発者として、関数型プログラミングを学びたいと思ったことはありませんでした。

数ヶ月前、ついにHaskellを学ぶことにしました。とてもクールな言語ですが、イベント駆動型の実際のアプリがそのような言語でどのようにプログラミングされるのか、私は困惑しています。それについての良いチュートリアルを知っていますか?

注:「実際のアプリ」と言ったとき、私は実世界の製品版アプリのことではありません。私はそれを理解するための小さなサンプルアプリを意味します。 Windows caculatorの簡略化されたバージョンのようなものが素晴らしいと思いますが、おそらくもう少し複雑なものになるでしょう。

48
raven

「実世界」の例を言うとき、あなたはおそらく本質的にシーケンシャルまたはステートフルであるか、または大量の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は一例にすぎません。

89
Jörg W Mittag

稲妻の話 の今日、私はこのショーケースのHaskellアプリケーションのリストを組み立て、プログラマーのみを対象とするものは意図的に除外しました:

  • darcs (2002年以降、35 000 loc):状態ではなく変更に革新的な焦点を当てた分散バージョン管理システム。
  • xmonad (2007年以降、30000 loc):レイアウトやその他のプラグインの巨大なライブラリを備えた有名なタイルウィンドウマネージャー。設定ファイルがHaskellファイルであるにもかかわらず、リストに追加しました。
  • hledger (2007年以降、9000 loc):テキストファイルベースの二重元帳会計ツール、 元帳のクローン
  • Raincat (2008年、2000年以降):濡れたくない猫とのプラットフォームゲーム。
  • arbtt (2009年、2000年以降):ルールベースの自動タイムトラッカー。恥知らずなプラグとしてリストに入れました。おそらくそれほど人気ではありません。 Waldir Pimentaによって提供された適切なWebページが追加されました。
  • detexify (2010年以降、500 loc):非常に便利なLaTeX文字コマンドFinderのバックエンドはHaskellで記述されています。
  • git-annex (2010年以降、28 000 loc):Dropboxとgitが混在するファイルとその場所を管理します。 kickstarter を介して生計を立てた有名なJoey Hessによって書かれ、現在 2回目の資金調達を行っています
  • Nikki and the Robots (2010年以降、18000 loc):Nikkiと、まあ、彼のロボットとのプラットフォームゲーム。商用の独立系ゲームとして制作され、従量課金制で販売されたが、残念ながら同社は閉鎖された。
  • hoodle (2011年以降、13,000 loc):メモを取り、PDF xournal
  • Chordify (2012以降、?loc):音楽を分析します。 YouTubeビデオから、対応するギターの和音を計算します。閉じたソフトウェアですが、おそらくHaskellで書かれています。

(また、 私のブログ 、およびトークの スライドで紹介されています 、各プログラムのニースの代表的な写真。)

8

xmonadはイベント駆動型(文字通り)です。イベントでウェイクアップし、Xサーバーをモデル化する内部状態を変更するリスナーループがあり、それが画面にレンダリングされます。

http://xmonad.org

7
Don Stewart

Haskellで書かれたこのircボットを見つけたことがあります。

http://www.haskell.org/haskellwiki/Roll_your_own_IRC_bot

6
Mercer Traieste

ここにあなたが要求したいくつかのリンクがあります。

これは、Haskellについて命令型プログラマーにとって「意味をなさない」多くのことを説明しています

Cプログラマ向けHaskellチュートリアル

これは非常にわかりやすいチュートリアルです

あなたに大きな利益のためのHaskellを学ぶ

Haskellで書かれたレイトレーサー

Haskellレイトレーサー

こちらからグラスゴーハスケルコンパイラをダウンロードできます。 [〜#〜] ghc [〜#〜]

6
Indy9000

あなたはチェックアウトする必要があります Real World Haskell 。この本は無料で入手でき、Haskellを実際の問題に適用する方法を示しています。チュートリアルがはるかに包括的であるため、チュートリアルとは呼びません。

4
Nils Wloka

チェックアウト 関数型反応プログラミング

2
starblue