Comment expédier un exécutable avec Language.Haskell.Interpreter?

J’espérais intégrer un interpréteur Haskell à l’aide de hint afin que je puisse écrire des plugins dans Haskell à utiliser avec mon programme. Je ne veux pas expédier toute la plate-forme Haskell pour mes exécutables.

Normalement, les exécutables Haskell sont plutôt autonomes. Par exemple, effacer le PATH ne pose pas de problème:

 $ PATH=. Hello Hello world 

Cependant, un programme de test simple utilisant des bombes runInterpreter si runInterpreter 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 de conseils:

 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 de TryHint ne fait pas grand chose:

 import Control.Monad import Language.Haskell.Interpreter main = do f > setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int) case f of Left e -> print e Right r -> mapM_ (print . r) [1..10] 

Il ne fait que lier f à une fonction dans Test.hs pour être interprété au moment de l’exécution. Test.hs ressemble à ceci:

 module Test where f :: Int -> Int fx = x + 1 

Envoyer un exécutable avec Language.Haskell.Interpreter semble aller parfaitement avec la façon dont vous avez montré. Vous devez définir votre PATH sur le script que vous souhaitez exécuter.

En outre, comme mentionné par @bennofs dans les commentaires, la liaison statique de l’API GHC ne fonctionne pas avec le nouvel éditeur de liens dynamic introduit dans GHC 7.8 (l’exécution du code interactif nécessite désormais des bibliothèques dynamics).