Pregunta

Con una instalación limpia de la "Plataforma Haskell". (OS X Snow Leopard y Plataforma 2010.1.0.1), haciendo esto provoca simple secuencia hace que el comportamiento cabal install muy raro:

$ cabal install time

$ cabal install random

$ ghc-pkg list random
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d
   random-1.0.0.2
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
   random-1.0.0.2

random-1.0.0.2 se instala dos veces en mi sistema. y ahora vuelve a instalar haciendo cabal install random random-1.0.0.2 cada vez.

Las apariencias como random depende de time, y Cabal quiere volver a instalarlo después de que hay una nueva versión de time disponibles? Y debido a dos Cabal random-1.0.0.2 se confunde y siempre piensa que no es hasta la fecha, ya que está mirando el primero?

ghc-pkg check encuentra ningún error.

¿Fue útil?

Solución 3

Voy a describir el trabajo en torno a que funcionó tan lejos para mí. He intentado muchas cosas diferentes, pero sólo voy a describir aquí el intento que funcionó.

(por cierto: Estoy utilizando Mac OS X 10.6.4 y sus resultados pueden ser diferentes en diferentes sistemas)

  • He instalado GHC 6.12.3 de la fuente. No se quite el GHC anterior como la construcción de GHC lo requiere.
  • I elimina los enlaces simbólicos en /usr/bin (por ghc, ghci, ghc-pkg, y runhaskell) a mi GHC anterior, que era la de la Plataforma Haskell 2010.1.0.1 instalador.
  • He instalado cabal-install usarlo de escritura bootstrap.sh.
  • He instalado versiones parcheadas de los paquetes random y haskell98. Las diferencias son sólo en sus archivos .cabal
    • La versión de random golpeado hasta 1.0.0.2.1 y lo cambió dependencia de time ser time == 1.1.*
    • versiones de haskell98 golpeado hasta 1.0.1.1.1 y eso es todo
  • Me corrió cabal update y cabal upgrade para ver qué paquetes están fuera de fecha. Yo cabal install aquellos. Creo que esto ayuda a alcanzar un estado estable más rápido. (Tenga en cuenta que de syb Error al instalar y que cabal install parsec dijo que no hay nada que hacer al respecto cuando dijo cabal upgrade diferente. Así que dejé esos dos paquetes solo)

Me validado que mi configuración está bien ejecutando ghc-pkg check entre las etapas. A veces se rompe debido a que un paquete se vuelve a instalar sobre una versión anterior con el mismo número de versión y paquetes que dependiera de ello necesario volver a instalar. Cuando eso sucede me cabal install los paquetes rotos de nuevo.

También se utilizó el programa siguiente para verificar que mi configuración no contiene dos paquetes con la misma versión:

import Data.List (sort)
import Data.Maybe (fromJust)
import System.IO (hGetContents)
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell)

main :: IO ()
main = do
    pkgListRaw <-
        createProcess (shell "ghc-pkg list") { std_out = CreatePipe }
        >>= hGetContents . fromJust . sndOfFourTup
    let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw
    putStrLn .
        unlines . map (dropWhile (== ' ') . fst) .
        filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted
    where
        sndOfFourTup (_, x, _, _) = x
  • Me cabal installed hlint, yesod, haddock, HDBC-mysql, hakyll y otros paquetes y luego cabal installed la lista anterior y otra vez hasta que mi configuración alcanzó un "estado estable" en el que cabal install no reinstala cualquiera de ellos.

  • I verificado que mis propios programas que estoy trabajando ahora compilar y trabajo. Todo parece estar bien ahora

Notas:

  • No pude conseguir Plataforma Haskell 2010.1.0.1 al trabajo. Las cosas sólo trabajaron para mí después de actualizar a GHC 6.12.3. (?) Irónicamente, esto va en contra de la recomendación sobre la página de descarga de GHC:
  

Stop!

     

Para la mayoría de los usuarios, se recomienda instalar la Plataforma Haskell en lugar de GHC. La versión actual de la plataforma Haskell incluye una versión reciente GHC, así como algunas otras herramientas (como Cabal), y un conjunto mayor de bibliotecas que se sabe que funcionan juntos.

  • Esta solución alternativa, probablemente se romperá en algún momento en el futuro también. Supongo que esto probablemente va a ocurrir dentro de unos meses. Una biblioteca central como random se actualizará y luego problemas de dependencia comenzará a desmoronarse de nuevo. Entonces voy a / que tendrá que pasar tiempo en conseguir nuestras configuraciones fijas. Tal vez entonces se requeriría la actualización a una nueva GHC. Pero quién sabe, tal vez entonces será una versión anterior que se convertirá en estable como paquetes hackage se actualizan para resolver problemas relacionados con la dependencia. Como un servicio a usted, voy a actualizar esta pregunta y la respuesta cuando llegue el momento. (Suponiendo que otros están teniendo este problema también. Hasta ahora he validado que Simon Marlow y Peaker cara este problema también)

  • Maneras de saber que su configuración Haskell se rompe (si alguno de ellos es cierto, entonces la configuración se rompe):

    • Nada funciona
    • ghc-pkg check dice que se rompe
    • El programa corto cuya fuente pongo en esta respuesta anterior hallazgos que you han instalado un paquete dos veces con la misma versión exacta
    • cabal update y luego cabal installing ciclo de la lista de paquetes que escribí más arriba, u otra lista (preferiblemente uno grande con un montón de dependencias). Si nunca llega a un estado estable (una iteración del ciclo siempre se vuelve a instalar algo) a continuación, la configuración se rompe. ADVERTENCIA : Este paso puede destruir su configuración Haskell actualmente en funcionamiento. Para ello, si usted es maso-curioso o dispuesto a reparar su instalación una vez que se rompe (un proceso que podría llevar mucho tiempo)
  • Me gustaría saber si sus configuraciones se rompen o trabajar. Esto me podría ayudar. Por ejemplo, si nos encontramos con que GHC 6.10 configuraciones están trabajando bien, I / T podría recomendar esas configuraciones a las personas con ocasión de recomendar a alguien para probar Haskell, etc.

espero que esto ayude a otros que se enfrentan los mismos o similares problemas. Muchas gracias a Simon y John Marlow!

Otros consejos

Por favor,

ghc-pkg check

Y si eso no muestra ningún error, vamos a ver la salida de

ghc-pkg list -v

y

cabal install random -v

Editar : Puedo reproducir su problema con GHC 6.12.1, pero no con 6.12.2, usando exactamente la misma versión de Cabal a instalar (0.8.0). Voy a mirar en él.

Editar 2 informó como un error en la cábala a instalar.

Tengo dos soluciones posibles, los cuales son un poco peligroso, pero debe usted conseguir una instalación de trabajo. Me alegro de Simon después de este, ya que suena como una especie de insecto para mí. Para obtener una instalación de trabajo, me gustaría probar el siguiente primero:

ghc-pkg unregister random

a continuación, hacer la lista GHC-PKG al azar para ver lo que está instalado. Conjeturaría (pero no estoy seguro) que usted todavía tiene la versión / Library / Frameworks (de la Plataforma), pero la versión recién instalada estará fuera. Si este es el caso, proceder al siguiente paso. Si no es así es probable que tengas que hacer una reinstalación limpia de la plataforma.

Suponiendo que la plataforma azar todavía está presente, hacer esto:

cabal unpack random

cd al directorio que es descomprimido en, y editar el archivo .cabal al golpear la versión de 1.0.0.2.1 (agregar otro campo y se incrementará por uno). Entonces Cabal instalar desde ese directorio y debe instalar el nuevo aleatoria. Dado que este tiene una versión diferente de la plataforma al azar, los dos pueden coexistir con seguridad.

En lugar de hacer el anular el registro GHC-PKG, puede eliminar directamente el archivo de registro de

  

/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d

el nombre del archivo tendrá un hash anexa a la misma, por lo que tendrá que buscar en el contenido del directorio para realmente obtener el valor. Simplemente elimine el archivo y GHC-PKG y Cabal no debe verlo desde entonces. Esto no toque la instalación de la plataforma (lo que es más seguro que en ese sentido), pero el potencial está todavía allí a la manguera de otros paquetes instalados. Después de esto, se puede volver a instalar el paquete al azar por el desembalaje e incrementando la versión que el anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top