Я сподівався вставити інтерпретатора Haskell, використовуючи, hint
щоб я міг писати плагіни в Haskell, щоб використовуватись із моєю програмою. Мені не хочеться доставляти всю платформу Haskell для своїх виконуваних файлів.
Зазвичай виконувані файли Haskell досить автономні. Наприклад, стирання знака PATH
не викликає проблем:
$ PATH=. Hello
Hello world
Однак проста програма тестування з використанням runInterpreter
бомб, якщо я стерю 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"
Які бібліотеки чи виконавчі файли повинні бути доступними в середовищі, щоб вона працювала?
otool
не дає великих рекомендацій:
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)
Тестовий код для TryHint
не дуже:
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]
Він просто пов'язується f
з функцією, Test.hs
яку слід інтерпретувати під час виконання. Test.hs
виглядає так:
module Test where
f :: Int -> Int
f x = x + 1
PATH=.
, таких як файли інтерфейсу для Prelude і все, що він транзитивно імпортує, фактичні файли бібліотеки для base і ghc-prim і integer-gmp, і settings
файл GHC . (В основному, все, що встановлено під /usr/lib/ghc
або еквівалентний каталог для вашої установки.)
PATH= ./TryHint
все проходить гладко: він друкує кілька цифр, а потім виходить. Я також використовую GHC 7.8.3. Як ти будуєшTryHint
?