Tôi đã hy vọng nhúng một trình thông dịch Haskell bằng cách sử dụng hint
để tôi có thể viết các plugin trong Haskell để sử dụng với chương trình của mình. Tôi không muốn phải vận chuyển toàn bộ nền tảng Haskell cho các tệp thực thi của mình.
Thông thường, các tệp thực thi Haskell khá khép kín. Ví dụ: xóa PATH
không gây ra vấn đề:
$ PATH=. Hello
Hello world
Tuy nhiên, một chương trình thử nghiệm đơn giản sử dụng runInterpreter
bom nếu tôi xóa 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"
Những thư viện hoặc thực thi nào phải có sẵn trong môi trường để nó hoạt động?
otool
không đưa ra nhiều hướng dẫn:
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)
Mã kiểm tra TryHint
không làm được gì nhiều:
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]
Nó chỉ liên kết f
với một chức năng Test.hs
để được giải thích tại thời gian chạy. Test.hs
trông như thế này:
module Test where
f :: Int -> Int
f x = x + 1
PATH=.
, chẳng hạn như các tệp giao diện cho Prelude và mọi thứ mà nó nhập quá mức, các tệp thư viện thực tế cho cơ sở và ghc-prim và số nguyên-gmp và settings
tệp GHC . (Về cơ bản, mọi thứ được cài đặt bên dưới /usr/lib/ghc
hoặc thư mục tương đương cho cài đặt của bạn.)
PATH= ./TryHint
mọi thứ diễn ra suôn sẻ: nó in một vài số, sau đó thoát ra. Tôi cũng đang sử dụng GHC 7.8.3. Bạn đang xây dựngTryHint
như thế nào?