haskell - descargar - Carga dinámica bajo GHCi
haskell descargar (1)
Está intentando cargar dinámicamente el intérprete de bytecode y el tiempo de ejecución en el intérprete de bytecode y el tiempo de ejecución. Si esto funcionará dependerá de cómo se vinculen las bibliotecas de C subyacentes en su sistema, que depende mucho de la plataforma.
En particular, los símbolos de C se duplicarán a menos que se tenga especial cuidado al vincular, cuando cargue los distintos módulos RTS por segunda vez, lo que dará lugar a errores de vinculador.
Necesito poder cargar módulos de Haskell dinámicamente y evaluar expresiones en el contexto de módulos cargados dinámicamente.
Hint hace; El problema es que no funciona bajo GHCi, al menos en Windows.
cygwin-bash> ghci HintTest.hs
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Ok, modules loaded: Main.
Prelude Main>
Prelude Main> main
[... lots of "Loading package" messages snipped]
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
_debugLn
whilst processing object file
C:/PROGRAM FILES (X86)/HASKELL PLATFORM/2013.2.0.0/lib/ghc-prim-0.3.0.0/HSghc-prim-0.3.0.0.o
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf'' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.
Recibo el mismo error cuando uso los módulos de GHC directamente, como se muestra en GHC / Como una biblioteca .
Como un programa compilado, HintTest
funciona bien.
¿Hay algo que se pueda hacer al respecto?
Nunca necesito ejecutar mi programa de forma independiente; Siempre usar GHCi es suficiente. También sería bueno si el programa pudiera usar GHCi como el intérprete y no como su propia copia de GHC. Es decir, me gustaría poder hacer algo como esto:
do
context <- loadToGhci "MyModule.hs"
inContext context "MyModule.myFunction 2 5"
y cuando vuelvo al REPL, MyModule se carga mágicamente en él. se supone que el context
es algún tipo de mónada que lleva el estado de GHCi.
Actualizar El mismo código funciona en Linux. Tal vez sea un error específico de Windows en GHC. ¿Se puede trabajar alrededor?
Actualización 2 Aquí está el registro completo
Prelude Main> main
Loading package array-0.4.0.1 ... linking ... done.
Loading package deepseq-1.3.0.1 ... linking ... done.
Loading package bytestring-0.10.0.2 ... linking ... done.
Loading package Win32-2.3.0.0 ... linking ... done.
Loading package transformers-0.3.0.0 ... linking ... done.
Loading package old-locale-1.0.0.5 ... linking ... done.
Loading package time-1.4.0.1 ... linking ... done.
Loading package syb-0.4.0 ... linking ... done.
Loading package random-1.0.1.1 ... linking ... done.
Loading package filepath-1.3.0.1 ... linking ... done.
Loading package directory-1.2.0.1 ... linking ... done.
Loading package process-1.1.0.2 ... linking ... done.
Loading package pretty-1.1.1.0 ... linking ... done.
Loading package mtl-2.1.2 ... linking ... done.
Loading package containers-0.5.0.0 ... linking ... done.
Loading package hpc-0.6.0.0 ... linking ... done.
Loading package hoopl-3.9.0.0 ... linking ... done.
Loading package haskell-src-1.0.1.5 ... linking ... done.
Loading package old-time-1.1.0.1 ... linking ... done.
Loading package Cabal-1.16.0 ... linking ... done.
Loading package binary-0.5.1.1 ... linking ... done.
Loading package bin-package-db-0.0.0.0 ... linking ... done.
Loading package template-haskell ... linking ... done.
Loading package ghc-7.6.3 ... linking ... done.
Loading package extensible-exceptions-0.1.1.4 ... linking ... done.
Loading package MonadCatchIO-mtl-0.3.0.5 ... linking ... done.
Loading package ghc-mtl-1.0.1.2 ... linking ... done.
Loading package ghc-paths-0.1.0.9 ... linking ... done.
Loading package utf8-string-0.3.7 ... linking ... done.
Loading package hint-0.3.3.7 ... linking ... done.
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
_debugLn
whilst processing object file
C:/PROGRAM FILES (X86)/HASKELL PLATFORM/2013.2.0.0/lib/ghc-prim-0.3.0.0/HSghc-prim-0.3.0.0.o
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf'' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.