38

関数型言語で GUI を作成する方法については、多くの研究が行われてきました。プッシュ/プル frp、矢印ベースの frp、およびおそらく他の優れた研究用のライブラリもあります。多くの人はこれがよりネイティブな方法であることに同意しているようですが、ほぼ全員が gtk2hs や wxhaskell などの命令型バインディング ライブラリを使用しているようです。優れた チュートリアルとして推奨されている場所でさえ、これらの単純な命令型ライブラリへのバインディングを教えています。FRPの研究に基づいたGUIを作ってみませんか?

4

3 に答える 3

26

前回の回答からほぼ 1 年が経過し、関数型リアクティブ プログラミング(FRP)の世界では状況が変わりました。

  • 特に、Haskell で FRP 用の小さなライブラリである react -bananaを作成しました。まだいくつかの機能が欠けていますが、一連の例で示されているように、純粋に機能的なスタイルで GUI を実装するための優れた方法です。ここにスクリーンショットがあります: ここに画像の説明を入力

  • これまで通り、WebブラウザにはFRP用のJavaScriptライブラリであるFlapjaxもあります。

于 2011-07-28T06:42:12.320 に答える
23

関数型リアクティブ プログラミング(FRP) がグラフィカル ユーザー インターフェイスを実装する方法であることに誰もが同意しますが、Haskell でそれを行うための包括的なライブラリはまだ登場していません。主な理由は次のとおりだと思います。

  • 表現力とリソースの使用量のバランスを取るのは困難です (スペースリーク、タイミングの問題)。FRP モデルの表現力が高ければ高いほど、効率を保証しながら実装することは難しくなります。デザインスペースはまだ模索中です。
  • API の利便性。FRP は の形の関数を実装するのに適していますが、Time -> MouseInput -> PictureGTK+ や Cocoa のような GUI プラットフォームはそのようには機能しません。問題は、従来のスタイルよりも複雑になることなく、FRP スタイルで後者をどのように表現するかです。

つまり、FRPの研究はまだ終わっていません。

そうは言っても、JavaScript にコンパイルされる言語であるFlapjaxなど、いくつかの実用的な実装が既に存在します。

いずれにせよ、特定の目的に合わせて調整された独自の FRP ライブラリを実装し、それによって大きな利益を得ることを誰も止められません。Luke Palmerはこれを成功させており、私も現在それを試みています。(変更可能な変数よりも FRP で時間を無駄にしたいです。)

于 2010-08-14T15:10:07.980 に答える