Haskell には大きなコンソール アプリケーションがあり、クロス プラットフォームの作成と GUI の追加を担当しています。
要件は次のとおりです。
- 可能な限りネイティブなルック アンド フィール。
- 可能であれば、Windows および Mac OS X、Linux 用のクライアント。
- 個別のランタイムをインストールする必要はありません。
- ネットワーク通信不要。Haskell コードは、ネットワーク経由で送信できない非常に機密性の高い情報を扱います。これが、これが Web アプリケーションではない唯一の理由です。
さて、この質問の本当の理由は、私が現在研究している 1 つの解決策を説明し、私が考えていない理由を求めて、これを悪い考えにすることです。
私の解決策はネイティブGUIです。Windows の Winforms、Mac OS X の Cocoa、および Linux の GTK/Glade は、単純にプレゼンテーションを処理します。次に、Haskell コードの上にレイヤーを作成し、ZeroMQ を使用してメッセージを処理し、場合によってはデータを前後にシリアル化するための protobuf を使用して、UI との間のメッセージのレスポンダーにします。したがって、ネイティブ アプリケーションが起動し、それ自体がすべての魔法が発生するデーモンを起動し、メッセージを送受信します。
デーモンがそれを開始したアプリケーションからの接続のみを受け入れるようにすることと、高度な GUI 要素 (テーブル ビュー、セルなどを考えています) に適切なデータを前後に提供するという課題は別として、私はしません。これには多くの欠点があります。
私が考えていないことは、これを悪い考えにしているのでしょうか?
一見したところ、すべてのプラットフォームで GTK を使用するつもりだったことに言及する必要があります。問題は、Haskell に対する GTK と Glade のサポートが近づいている一方で、結果が「正しく」見えないことです。それは近いですが、この作品の小切手をたまたま書いている人々にその解決策が受け入れられないようにする微妙な方法で十分にネイティブではありません。
また、複数のプラットフォームの問題、したがって gui の複数の言語の問題は問題ではないため、Haskell コードとの相互運用性について何かを単純化しない限り、その問題を解決する他の方法を必ずしも探しているわけではありません。