Cara Anda melakukannya adalah dengan terlebih dahulu mendapatkan kompiler Haskell yang dapat menargetkan C dengan NDK android yang dilengkapi dengan port GCC untuk arsitektur ARM. JHC sepele dapat melakukan ini dengan file gaya inf sangat kecil yang menggambarkan platform (ukuran kata, c-compiler, dll) Saya sudah melakukan ini dengan kit homebrew dev Wii dan itu cukup mudah. Namun jhc masih memiliki beberapa masalah stabilitas dengan kode kompleks seperti menggunakan tumpukan trafo monad dengan IO tetapi jhc telah meningkat banyak selama 6 bulan terakhir. Hanya ada satu orang yang bekerja di JHC. Saya hanya berharap lebih banyak orang bisa membantunya.
Opsi lainnya adalah membangun port GHC "tidak terdaftar" yang menargetkan ndk gcc, ini lebih banyak proses yang terlibat karena GHC bukan kompilator silang sejati saat ini dan Anda perlu memahami sistem build bagian mana yang Anda butuhkan. perubahan. Opsi lain adalah NHC yang dapat melakukan kompilasi silang ke C, seperti GHC yang Anda butuhkan untuk membangun nhc yang menargetkan kompiler C, NHC tidak memiliki banyak ekstensi Haskell seperti GHC.
Setelah Anda memiliki kompiler Haskell yang menargetkan NDK GCC, Anda harus menulis binding ke kerangka kerja kode lem NDK JNI android (ditambahkan sejak android 2.3) atau Anda harus menulis kode lem JNI antara Java-C-Haskell, opsi sebelumnya adalah lebih mudah solusi dan jika saya ingat dengan benar mungkin sebenarnya kompatibel dengan versi Android sebelumnya di bawah 2.3.
Setelah Anda memiliki ini, Anda harus membangun kode Haskell sebagai shared library atau perpustakaan statis yang akan ditautkan ke kode lem java NDK (yang itu sendiri adalah shared library). Sejauh yang saya ketahui Anda tidak dapat secara resmi menjalankan executable asli di android. Anda mungkin dapat melakukannya dengan ponsel yang di-rooting, jadi saya berasumsi ini berarti Anda tidak dapat mendistribusikan executable asli di app store bahkan ketika port gcc NDK dapat menghasilkan executable asli dengan baik. Ini juga mungkin membunuh opsi untuk menggunakan LLVM kecuali Anda bisa mendapatkan NDK JNI bekerja dengan LLVM.
Rintangan terbesar tidak begitu banyak untuk mendapatkan kompiler Haskell untuk android (yang masih merupakan rintangan besar) masalah terbesar adalah bahwa seseorang perlu menulis API yang mengikat untuk perpustakaan NDK yang merupakan tugas besar dan situasinya lebih buruk jika Anda perlu menulis kode UI Android karena tidak ada NDK API untuk bagian SDK android ini. Jika Anda ingin melakukan kode UI Android di Haskell, seseorang harus menulis binding Haskell ke Java melalui JNI / C. Kecuali ada proses yang lebih otomatis untuk menulis perpustakaan yang mengikat (saya tahu ada beberapa, mereka tidak cukup otomatis untuk saya) maka kemungkinan seseorang melakukannya cukup rendah.
L01man: Apakah ada tutorial tentang cara melakukan ini? Untuk bagian pertama, saya mengerti saya harus mengunduh JHC. Apa yang harus saya tulis di file inf dan bagaimana cara menggunakannya?
Harap dicatat sebelum saya menjawab pertanyaan ini, saya belum pernah menggunakan jhc untuk beberapa waktu sejak saya awalnya menulis ini dan versi yang lebih baru telah dirilis sejak jadi saya tidak tahu seberapa stabil jhc saat ini ketika datang ke pembuatan kode program Haskell yang lebih kompleks. Ini adalah peringatan bagi siapa pun sebelum Anda mempertimbangkan untuk membuat program Haskell besar dengan JHC, Anda harus melakukan beberapa tes kecil sebelum melanjutkan.
jhc memang memiliki manual http://repetae.net/computer/jhc/manual.html dan bagian tentang pengaturan kompilasi silang dan file .ini dengan opsi: http://repetae.net/computer/jhc/manual .html # kompilasi silang .
L01man: Bagian kedua adalah alternatif dari yang pertama. Saya tidak tahu bagaimana melakukan apa yang Anda katakan pada yang ketiga.
Sebelum Anda mulai, Anda harus memiliki pengetahuan tentang C dan merasa nyaman dengan menggunakan antarmuka fungsi asing Haskell (FFI) dan alat-alat seperti hs2c. Anda juga harus terbiasa menggunakan Android NDK dan membangun .apk dengan perpustakaan bersama. Anda perlu mengetahui hal ini untuk menghubungkan antara C-Haskell, Java / C-Haskell dan mengembangkan program Haskell untuk Android yang dapat Anda distribusikan / jual secara resmi di market store.
L01man: Saya mengerti bahwa tujuannya adalah untuk membuat pengikatan untuk Android API. Tapi ... apakah bagian ke-4 mengatakan kita tidak bisa membuat .apk dengan Haskell?
.apk hanyalah format file paket aplikasi dan dibangun dengan alat-alat yang datang dengan Android SDK (bukan NDK), ini sangat sedikit untuk membangun binari itu sendiri. Paket Android dapat berisi pustaka bersama asli, ini akan seperti apa program Haskell Anda dan pustaka bersama / statis asli dihasilkan melalui Android NDK.