Seperti yang dinyatakan oleh Haskell Wiki :
Ada sejumlah besar pustaka GUI untuk Haskell. Sayangnya tidak ada standar dan semuanya kurang lebih lengkap. Secara umum, veneer tingkat rendah berjalan dengan baik, tetapi tingkatnya rendah. Abstraksi tingkat tinggi sangat eksperimental. Ada kebutuhan untuk perpustakaan GUI tingkat menengah yang didukung.
Seorang profesor di kampus saya bertanya kepada saya dan tiga jurusan ilmu komputer lainnya untuk mempertimbangkan bekerja di perpustakaan GUI untuk Haskell. Ide awalnya untuk proyek ini adalah untuk menulis lapisan di atas OpenGL yang menirukan perpustakaan morfik yang ditemukan di Smalltalk ; Namun, ini hanya saran dan sistem lain yang patut dipertimbangkan.
Ini membawa kita ke pertanyaan aktual, multi-bagian.
- Untuk tingkat abstraksi apa yang harus diupayakan oleh perpustakaan kita? Haskell Wiki tampaknya menunjukkan dengan kuat bahwa perpustakaan GUI tingkat menengah lebih disukai; Namun, perpustakaan tingkat tinggi masih akan diterima.
- Atas apa perpustakaan kita harus dibangun? (Mis. OpenGL)
- Pustaka GUI apa yang ingin Anda lihat di perpustakaan kami meniru (jika ada) dan mengapa? (Contoh: PyGame, Morphic, Swing, dll)
- Fitur apa yang ingin Anda lihat atau hindari dari perpustakaan kami? Misalnya, orang-orang baik di Gnome mungkin berpendapat bahwa tombol perkecil tidak perlu.
- Apakah Anda punya saran umum?
- Nama pintar apa yang akan Anda berikan pada perpustakaan imajiner ini? (Mis. HOT - Haskell Opengl Toolkit; HAWT - Haskell Advanced Windowing Toolkit)
Jawaban:
Saya ingin melihat perpustakaan yang elegan dan mudah digunakan dengan Haskell. Selebihnya adalah perincian teknis yang harus memenuhi tujuan ini, bukan mendefinisikannya kembali. Jadi $ 0,02 saya.
Jangan mendasarkannya pada toolkit yang ada , seperti Qt atau GTK atau FLTK atau ... - ini akan sangat membatasi Anda dan mungkin akan memberi Anda jauh lebih sakit daripada keuntungan. PyQt, erm, lucu dan cukup dibikin, dan baik Python maupun C ++ adalah bahasa OO imperatif yang sangat fleksibel. Dalam kasus Haskell, banyak hal akan lebih kasar, saya kira.
Bergantung hanya pada grafis primitif paling dasar , lalu bangun di atas itu. OpenGL bagus, tetapi bahkan sesuatu yang lebih sederhana (hanya 2D, mis. SDL) juga bisa digunakan. Ini akan memberi Anda fleksibilitas maksimum dan portabilitas maksimum. Lihat Smalltalk / Morphic, Java / Swing, TCL / Tk.
Buat itu secara konsep kecil. GUI memang sulit, tidak perlu menambahkan Everest lain untuk didaki. Haskell, saya harap, dapat membantu menjadikannya ringkas dan modular.
Untuk poin bonus, buat itu skinnable. Paling tidak, ketahui cara menerapkan warna sistem (dan hanya warna sistem) untuk mengecat seluruh repertoar kontrol Anda, sehingga aplikasi yang dibuat dengan toolkit ini tidak merusak pemandangan. Sebagai maksimum, ketahui cara membuat Win32 / Gtk / Qt / Cocoa menggambar kontrol Anda sehingga mereka terlihat asli sepenuhnya. Skinnability dasar sederhana dan logis; mendapatkan tampilan asli yang penuh cukup sulit.
Juga, silakan jalankan rootless dan tinggalkan manajemen jendela ke sistem grafis yang mendasarinya - X, Windows, apa pun. Tidak melakukan hal itu akan menantang kewarasan pengguna dan menghambat adopsi secara drastis.
Seperti biasa, 'membuat hal-hal sederhana menjadi hal-hal sederhana dan kompleks' + 'hindari Turing tarpit di mana semuanya mungkin tetapi tidak ada yang menarik adalah hal sederhana' + 'buat sesederhana mungkin tetapi tidak lebih sederhana'.
Nama adalah hal yang paling tidak penting. Dari semua toolkit GUI yang populer, hanya Qt yang memiliki nama yang cerdik. Sejumlah proyek populer mengubah nama, bahkan dalam penerbangan (Firefox, née Firebird). Punya nama, dan Anda akan menamainya.
Semoga berhasil!
sumber
Setelah berbicara di antara semua siswa yang terlibat dan memberikan pertanyaan ini waktu yang cukup untuk menghasilkan minat, saya percaya kami telah mencapai konsensus tentang beberapa pertanyaan kunci dalam posting asli saya.
Kami memutuskan untuk membidik perpustakaan tingkat menengah sesuai saran Haskell Wiki.
Kami memilih OpenGL karena popularitas dan dukungannya. Kami akan menggunakan proyek wrapper GLUT atau GLFW Haskell sebagai basis.
Kami memilih Morphic setelah banyak perdebatan antara itu dan PyGame. Kami tidak mempertimbangkan QT atau GTK karena keduanya sudah memiliki satu atau lebih proyek perpustakaan Haskell dalam pengembangan aktif .
Ini masih bisa diperdebatkan. Kami telah memutuskan untuk tidak mempertimbangkan HAWT dan sebagai gantinya melihat:
sumber