Speravo di incorporare un interprete Haskell usando in hint
modo da poter scrivere plugin in Haskell da usare con il mio programma. Non voglio spedire l'intera piattaforma Haskell per i miei eseguibili.
Normalmente, gli eseguibili Haskell sono piuttosto indipendenti. Ad esempio, la cancellazione di PATH
non causa problemi:
$ PATH=. Hello
Hello world
Tuttavia, un semplice programma di test che utilizza runInterpreter
bombe se cancello 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 librerie o file eseguibili devono essere disponibili nell'ambiente affinché funzioni?
otool
non fornisce molta guida:
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 test 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]
Si lega semplicemente f
a una funzione Test.hs
da interpretare in fase di esecuzione. Test.hs
Somiglia a questo:
module Test where
f :: Int -> Int
f x = x + 1
PATH=.
, come i file di interfaccia di Prelude e tutto ciò che importa in modo transitorio, i file di libreria effettivi per base e ghc-prim e integer-gmp e il settings
file GHC . (Fondamentalmente, tutto installato sotto /usr/lib/ghc
o la directory equivalente per l'installazione.)
PATH= ./TryHint
tutto procede senza intoppi: stampa alcuni numeri, quindi esce. Sto anche usando GHC 7.8.3. Come stai costruendoTryHint
?