Speravo di incorporare un interprete Haskell usando hint
in modo da poter scrivere plugin in Haskell da utilizzare con il mio programma. Non voglio dover spedire la maledetta piattaforma Haskell per i miei eseguibili. Normalmente, gli eseguibili di Haskell sono piuttosto autosufficienti. Ad esempio, cancellando il PATH
non causa un problema:Come spedire un eseguibile con Language.Haskell.Interpreter?
$ PATH=. Hello
Hello world
Tuttavia, un semplice programma di test utilizzando runInterpreter
bombe se cancellare il 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"
Quali biblioteche o eseguibili devono essere disponibili nell'ambiente per farlo funzionare?
otool
non dà molte indicazioni:
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)
Il codice di prova per TryHint
non fa molto:
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]
E 'appena si lega f
a una funzione in Test.hs
essere interpretati in run-time. Test.hs
assomiglia a questo:
module Test where
f :: Int -> Int
f x = x + 1
Non riesco a riprodurre questo problema. Quando eseguo 'PATH =./TryHint' tutto va liscio: stampa alcuni numeri, quindi esce. Sto anche usando GHC 7.8.3. Come stai costruendo 'TryHint'? –
Che dire di 'PATH =. TryHint' (nota dove si trova lo spazio)? L'eseguibile 'TryHint' dovrebbe essere nella directory di lavoro corrente. – ErikR
@ user5402 Ho provato entrambi. Sono esattamente uguali. –