2015-01-29 2 views
135

Я надеялся внедрить интерпретатор Haskell с помощью hint, чтобы я мог писать плагины в Haskell для использования с моей программой. Я не хочу, чтобы я отправлял эту проклятую платформу Haskell для своих исполняемых файлов. Обычно исполняемые файлы Haskell довольно автономны. Например, стирая PATH не вызывает проблему:Как отправить исполняемый файл с помощью Language.Haskell.Interpreter?

$ 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 
+6

Я не могу воспроизвести эту проблему. Когда я запускаю 'PATH =./TryHint', все идет гладко: он печатает несколько цифр, а затем выходит. Я также использую GHC 7.8.3. Как вы строите «TryHint»? –

+1

Как насчет 'PATH =. TryHint' (обратите внимание, где находится пробел)? Исполняемый «TryHint» должен находиться в текущем рабочем каталоге. – ErikR

+0

@ user5402 Я попробовал оба. Они точно такие же. –

ответ

2

Доставка исполняемого файла с Language.Haskell.Interpreter, кажется, идет совершенным с тем, как вы показали. Вы должны установить PATH сценарию, который вы хотите выполнить.

И, как отмечалось в комментариях, @bennofs в комментариях, статическая привязка API GHC не работает с новым динамическим компоновщиком, введенным в GHC 7.8 (для выполнения интерактивного кода теперь требуются динамические библиотеки).