1. ホーム
  2. user-interface

[解決済み】関数型GUIプログラミングは可能か?[クローズド]

2022-03-24 07:50:03

質問

私は最近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で、主に関数的反応プログラミングを使用しています。

いくつかの例を挙げます。

Haskellに詳しくない人のために、Flapjaxを紹介します。 http://www.flapjax-lang.org/ は、JavaScriptの上に機能的な反応プログラミングを実装したものです。