Haskellには多数のGUIライブラリがあります。残念ながら標準的なものはなく、すべてが多かれ少なかれ不完全です。一般に、低レベルのベニアは順調ですが、低レベルです。高レベルの抽象化はかなり実験的です。サポートされている中レベルのGUIライブラリが必要です。
私の大学の教授は、私と他の3つのコンピュータサイエンス専攻に、HaskellのGUIライブラリの作成を検討するように依頼しました。プロジェクトの彼の最初のアイデアは、OpenGLの上にレイヤーを書くことでした Smalltalkにあるモーフィックライブラリ ;ただし、これは単なる提案であり、他のシステムも検討する価値があります。
これは、実際のマルチパートの質問に私たちをもたらします。
Haskellで使用するのにエレガントでシンプルなライブラリが欲しいです。残りは、この目的を果たすための技術的詳細であり、それを再定義するものではありません。したがって、私の$ 0.02。
既存のツールキットをベースにしないでください、Qt、GTK、FLTKなど... —これは深刻な制限になり、利益よりもはるかに多くの苦痛をもたらすでしょう。 PyQtは、えーと、おかしく、十分に工夫されており、PythonとC++は、非常に柔軟な命令型のOO言語です。Haskellの場合、よりラフだと思います。
最も基本的なグラフィックプリミティブにのみ依存、それから構築します。 OpenGLは素晴らしいですが、もっと単純なもの(2Dのみ、SDLなど)でもうまくいくでしょう。これにより、最大限の柔軟性が得られますおよび最大の移植性。 Smalltalk/Morphic、Java/Swing、TCL/Tkを参照してください。
概念的には小さくしてください。 GUIはそのままで、登るために別のエベレストを追加する必要はありません。 Haskellは、物事をコンパクトでモジュール式にするのに役立つと思います。
ボーナスポイントの場合は、スキンを変更できるようにします。少なくとも、システムカラー(およびシステムカラーのみ)を適用して、コントロールのレパートリー全体をペイントする方法を知っていると、このツールキットで構築されたアプリは、目障り。最大で、Win32/Gtk/Qt/Cocoaが完全にネイティブに見えるようにコントロールを描画する方法を知っています。基本的なスキナビリティはシンプルで論理的です。完全なネイティブの外観を実現することは非常に困難です。
また、ルートレスで実行し、ウィンドウ管理を基盤となるグラフィックシステムに任せてください — X、Windowsなど。そうしないと、ユーザーの健全性が損なわれ、採用が大幅に妨げられます。
いつものように、「シンプルなものをシンプルに、複雑なものを可能にする」+「すべてが可能であるが、興味のあるものが何もないチューリングターピットを回避する」+「できるだけシンプルにするが、シンプルではない」.
名前は最も重要ではありません。すべての人気のあるGUIツールキットの中で、Qtだけがなんとなく賢い名前を持っています。数多くの人気のあるプロジェクトが機内でさえ名前を変えました(Firefox、néeFirebird)。名前を付ける必要があります。名前を付けます。
幸運を!
関係するすべての生徒の間で話し合い、この質問に十分な時間をかけて関心を生み出した後、元の投稿でいくつかの重要な質問について合意に達したと思います。
私たちの図書館はどの程度の抽象化のために努力すべきでしょうか? Haskell Wikiは、中レベルのGUIライブラリが推奨されることを強く示しているようです。ただし、高レベルのライブラリは引き続き歓迎されます。
私たちは、Haskell Wikiの提案に従って中レベルのライブラリを目指すことを決定しました。
私たちのライブラリは何を構築する必要がありますか? (例:OpenGL)
OpenGLは、その人気とサポートから選択されました。 GLUTまたはGLFW Haskellラッパープロジェクトをベースとして使用します。
既存のGUIライブラリに、私たちのライブラリの模倣(存在する場合)をどのようにしてほしいですか、そしてその理由(例:PyGame、Morphic、Swingなど)
それとPyGameの間でかなりの議論の末、私たちはMorphicを選びました。 QTとGTKはどちらも既に1つ以上あるため、考慮しませんでした Haskellライブラリプロジェクトがアクティブに開発中 。
この架空のライブラリにはどんな賢い名前を付けますか? (例HOT-Haskell Opengl Toolkit; HAWT-Haskell Advanced Windowing Toolkit)
これはまだ議論の余地があります。私たちはHAWTを考慮しないことを決定し、代わりに以下を検討しています。