J'espérais intégrer un interpréteur Haskell en utilisant hint
afin que je puisse écrire des plugins dans Haskell à utiliser avec mon programme. Je ne veux pas avoir à expédier toute la plate-forme Haskell pour mes exécutables.
Normalement, les exécutables Haskell sont assez autonomes. Par exemple, effacer le PATH
ne pose pas de problème:
$ PATH=. Hello
Hello world
Cependant, un simple programme de test utilisant des runInterpreter
bombes si j'efface le 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"
Quelles bibliothèques ou exécutables doivent être disponibles dans l'environnement pour que cela fonctionne?
otool
ne donne pas beaucoup d'indications:
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)
Le code de test pour TryHint
ne fait pas grand chose:
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]
Il se lie simplement f
à une fonction Test.hs
pour être interprété au moment de l'exécution. Test.hs
ressemble à ça:
module Test where
f :: Int -> Int
f x = x + 1
PATH=.
, comme les fichiers d'interface pour Prelude et tout ce qu'il importe de manière transitoire, les fichiers de bibliothèque réels pour base et ghc-prim et integer-gmp, et le settings
fichier GHC . (Fondamentalement, tout est installé sous /usr/lib/ghc
ou dans le répertoire équivalent pour votre installation.)
PATH= ./TryHint
tout se passe bien: il imprime quelques chiffres, puis sort. J'utilise également GHC 7.8.3. Comment construisez-vousTryHint
?