Saya berharap untuk menyematkan juru bahasa Haskell hint
sehingga saya dapat menulis plugin di Haskell untuk digunakan dengan program saya. Saya tidak ingin mengirimkan seluruh platform Haskell untuk file executable saya.
Biasanya, file executable Haskell cukup mandiri. Misalnya, menghapus PATH
tidak menimbulkan masalah:
$ PATH=. Hello
Hello world
Namun, program uji sederhana menggunakan runInterpreter
bom jika saya menghapus PATH
:
$ PATH=. TryHint
GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n"
Library atau executable apa yang harus tersedia di lingkungan agar dapat berfungsi?
otool
tidak memberikan banyak petunjuk:
otool -L TryHint
TryHint:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0)
Kode tes untuk TryHint
tidak berbuat banyak:
import Control.Monad
import Language.Haskell.Interpreter
main = do
f <- runInterpreter $ loadModules ["Test"] >> setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int)
case f of
Left e -> print e
Right r -> mapM_ (print . r) [1..10]
Itu hanya mengikat f
ke suatu fungsi Test.hs
untuk diinterpretasikan pada saat run-time. Test.hs
terlihat seperti ini:
module Test where
f :: Int -> Int
f x = x + 1
PATH= ./TryHint
semuanya berjalan lancar: mencetak beberapa angka, lalu keluar. Saya juga menggunakan GHC 7.8.3. Bagaimana Anda membangunTryHint
?PATH=.
, seperti file antarmuka untuk Prelude dan semua yang diimpor secara transit, file perpustakaan sebenarnya untuk base dan ghc-prim dan integer-gmp, sertasettings
file GHC . (Pada dasarnya, semua terinstal di bawah/usr/lib/ghc
atau direktori yang setara untuk instalasi Anda.)Jawaban:
Mengirim file yang dapat dieksekusi
Language.Haskell.Interpreter
tampaknya berjalan sempurna dengan cara yang Anda tunjukkan. Anda harus mengatur AndaPATH
ke skrip yang ingin Anda jalankan.Dan sebagai catatan tambahan, seperti yang disebutkan oleh @bennofs dalam komentar, Menautkan secara statis API GHC tidak berfungsi dengan penaut dinamis baru yang diperkenalkan di GHC 7.8, (eksekusi kode interaktif sekarang membutuhkan pustaka dinamis).
sumber