[解決済み】関数型GUIプログラミングは可能か?[クローズド]
質問
私は最近FPのバグに感染し(Haskellを学ぼうとしている)、これまで見てきたもの(ファーストクラス関数、遅延評価、その他すべての良いもの)に本当に感動しました。 私はまだ専門家ではありませんが、基本的なアルゴリズムについては命令的に推論するよりも "関数的に" を推論する方が簡単だと既に感じ始めています(そして、戻らなければならないところに戻るのに苦労しています)。
しかし、現在のFPが挫折しそうなのは、GUIプログラミングの分野です。 Haskellのアプローチは、GTK+やwxWidgetsなどの命令型GUIツールキットをラップして、"do"ブロックを使って命令型のスタイルをシミュレートしているようです。 私はF#を使ったことがありませんが、私の理解では、.NETのクラスでOOPを使って似たようなことをやっているようです。 明らかに、これには良い理由があります。現在のGUIプログラミングはIOと副作用がすべてなので、純粋な関数型プログラミングは現在のほとんどのフレームワークでは不可能なのです。
質問は、GUIプログラミングに関数的なアプローチをすることは可能なのか、ということです。 実際にどのようなものになるのか想像がつきません。 このようなことを試みているフレームワーク(あるいは関数型言語のために一から設計されたフレームワーク)を、実験的であろうとなかろうと、どなたかご存知でしょうか? それとも、GUI部分はOOP、ロジックはFPというハイブリッドなアプローチで解決するのでしょうか? (FPが未来だと思いたいのですが、GUIプログラミングはかなり大きな穴のようなので、好奇心で聞いてみただけです)。
どのように解決するのですか?
<ブロッククオートHaskellのアプローチは、命令型GUIツールキット(GTK+やwxWidgetsなど)をラップし、"do"ブロックを使用して命令型のスタイルをシミュレートすることです。
これはHaskellのアプローチではなく、命令型GUIツールキットと最も直接的に結合する方法、つまり命令型インターフェースを介した方法です。Haskellはたまたまかなり目立つバインディングを持っているだけです。
GUIに対する純粋に関数的/宣言的なアプローチには、適度に成熟したもの、あるいは実験的なものがいくつかあり、そのほとんどはHaskellで、主に関数的反応プログラミングを使用しています。
いくつかの例を挙げます。
- reflex-platformです。 https://github.com/reflex-frp/reflex-platform
- グレープフルーツ http://hackage.haskell.org/package/grapefruit-ui-gtk
- リアクティブになります。 http://hackage.haskell.org/package/reactive-glut
- wxFruit, http://hackage.haskell.org/package/wxFruit
- リアクティブバナナ http://hackage.haskell.org/package/reactive-banana
Haskellに詳しくない人のために、Flapjaxを紹介します。 http://www.flapjax-lang.org/ は、JavaScriptの上に機能的な反応プログラミングを実装したものです。
関連
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] プログラムによって色を明るくする
-
[解決済み] どのように公開TMPTextユニティC#を作るのですか?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] 関数型プログラミングで時間関数が存在するのはなぜですか?
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】保存アイコン。まだフロッピーディスク?[クローズド]
-
[解決済み】純粋な関数型プログラミングの効率性
-
[解決済み】Haskellの入門編
-
[解決済み] データベースと関数型プログラミングは対立するのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PL/SQL Developerで行番号を取得する方法は?
-
[解決済み] GUIとUIの違いは何ですか?
-
[解決済み] プログラムによって色を明るくする
-
[解決済み] どのように公開TMPTextユニティC#を作るのですか?
-
[解決済み】保存アイコン。まだフロッピーディスク?[クローズド]
-
[解決済み】なぜ一部の開発者にとって優れたUIデザインは難しいのか?[クローズド]
-
[解決済み】UI用語集:Logon vs Login [終了しました]
-
[解決済み】ASCIIスピナーをもっとかっこよく?[クローズド]
-
[解決済み] Flutterでテキストを垂直方向と水平方向の中央に配置する方法は?
-
[解決済み] エラーメッセージをユーザーに読ませるには?[クローズド]