world run mac hello compile haskell

run - ¿Cómo configura Haskell+ghc-mod en OS/X?



install haskell brew (3)

Editar (Agosto 2015) Mejor solucion

Una mejor herramienta de línea de comandos para instalar binarios y bibliotecas de Haskell por el increíble grupo FPComplete llamado stack significa que puede instalar ghc-mod con la stack install ghc-mod (fuera de un proyecto para hacerlo global) y simplemente funcionará. El binario se instalará en ~/.local/bin y se debe colocar en su ruta para que su editor pueda encontrarlo.

Dejaré lo siguiente para cualquier persona que desee saber qué significa realmente Cabal Hell.

Problema con el tenedor de DanielG

Pregunté en el reddit de Haskell y NihillstDandy explicó que el GHC para Mac OS X no registra la biblioteca Cabal. Esto no es cierto para su instalación desde http://ghcformacosx.github.io/ . Se registra la biblioteca Cabal.

ghc-mod necesita la biblioteca cabal para funcionar, pero no compila con la biblioteca cabal. En su lugar, se compila con cabal-helper y se ve si tiene una versión registrada de la biblioteca de cabal. Si no encuentra ninguno, cabal-helper-wrapper instalará una copia privada y, en este caso, se cansará de instalar la misma versión con la que se compiló cabal-install, cabal-1.22.0.0.

Cuando instalé la bifurcación de DanielG, funcionó para mi proyecto actual, pero después de probarlo en otros proyectos, recibo el mismo error que tú. Este es un problema con el tenedor y no con Haskell (por lo que puedo decir).

Respuesta original

Entonces, mientras estaba preparando este post, ghc-mod fue arreglado para GHC-7.10. Gracias a DanielG!

  • git clone https://github.com/DanielG/ghc-mod
  • cd ghc-mod
  • cabal install -j4

Y si obtiene errores que dicen "setup-Simple-Cabal-1.22.2.0-x86_64-osx-ghc-7.10.1: se requiere la versión ''happy'' del programa> = 1.17 pero no se pudo encontrar".

  • cabal install happy -j4

Lo mismo para cualquier otro problema y debería funcionar. (Aunque tienes instalado feliz, por lo que debería funcionar).

El resto del post es sobre cómo degradar el ejecutable de Cabal, también conocido como cabal-install, a la versión 1.20.0.3. Aunque realmente podrías usar esto para degradar a cualquier versión. Dado que hay una bifurcación en funcionamiento de ghc-mod que funciona con GHC-7.10 y cabal-1.22, no es necesario degradar para corregir ghc-mod.

Solo estoy dejando el resto del post aquí porque, desafortunadamente, este es un problema con Haskell en general. Halcyon y nix son formas de lidiar con las deficiencias de Haskell en este sentido.

Cómo bajar de categoría Cabal en Haskell

Cuando escribí este post ghc-mod, ni ningún fork, compilado con GHC-7.10 y versiones por debajo de 7.10 se rompió con cajas de arena cabal-1.22.

Sin embargo, incluso si compila ghc-mod con GHC-7.8.4 (la versión anterior a 7.10) y cabal-1.20.0.3, aún no puede usar ghc-mod dentro de una caja de arena creada por cabal-1.22 y superior. Por lo tanto, la única forma de usar ghc-mod es degradar todo el sistema a cabal-1.20.0.3 o no usar cajones de arena. Esto significa que aún puede usar GHC-7.10, pero tiene que usar la versión anterior de Cabal. Eso es a menos que quiera esperar hasta que el convocante u otra persona lo arregle para GHC-7.10. Ya pasó más de una semana, pero algún tipo de programador de Haskell lo solucionó en un tenedor (ver arriba).

Si esto es algo que todavía desea, aquí es cómo compilar ghc-mod con GHC-7.8.4 y cabal-1.20.0.3. Además, sustituyo el ejecutable cabal-1.22 con el anterior cabal-1.20.0.3. Tenga en cuenta que no importa en qué directorio descargue las fuentes.

  • descargue la fuente GHC-7.8.4 para su sistema operativo desde here
  • tar -xf path_to_zipped_source
  • cd path_to_ghc-7.8.4

Los siguientes pasos instalarán ghc-7.8.4, ya que ghc-7.8.4 se instala en la misma carpeta que ghc-7.10. El -j4 es decirle a make que use 4 hilos para compilarlo.

  • ./configure
  • make install -j4

Para obtener la versión correcta de Cabal solo podemos pedirle a Cabal que la obtenga.

  • cabal get cabal-install-1.20.0.3
  • cd cabal-install-1.20.0.3

Ahora a instalar cabal con ghc-7.8.4. Aquí cabal-1.22 tomará todas las decencias y debería advertirle sobre la instalación de otra versión de la biblioteca de cabal (no debe confundirse con cabal-install), esto no debería causar problemas.

  • cabal --with-compiler=ghc-7.8.4 install

Así que ahora deberías tener cabal-1.20.0.4 instalado, pero no en tu camino. Estará en ~ / .cabal / bin. Necesitamos hacer esto global, así que elimine cabal-1.22 (solo elimina el enlace simbólico).

  • rm `what cabal`

Y crea el enlace simbólico a cabal-1.20.0.4. Por cierto, deberás eliminar cualquier caja de arena que hayas hecho con cabal-1.22 y rehacerlos con cabal-1.20.0.4.

Si no tiene una ruta realpath , solo puede escribir la ruta completa de Cabal. Lo uso para la connivencia.

  • cd ~/.cabal/bin
  • ln -s `realpath cabal` / usr / local / bin

Ahora es así como compilé ghc-mod en mi mac (puede que tenga sus propios problemas). No estoy seguro de por qué Cabal no pudo hacerlo en una llamada, pero esto funcionó al final.

  • cabal --with-compiler=ghc-7.8.4 install happy
  • cabal --with-compiler=ghc-7.8.4 install haskell-src-exts-1.16.0.1
  • cabal --with-compiler=ghc-7.8.4 install hlint-1.9.19
  • cabal --with-compiler=ghc-7.8.4 install ghc-mod

Ahora deberías poder llamar a ghc-mod desde cualquier lugar. Para probarlo, simplemente escriba ghc-mod después de tener cabal sandbox init . Si no arroja ningún error, entonces está en claro.

Primero instalé Haskell desde https://www.haskell.org/platform/ pero ghc-mod tuvo problemas con las cajas de arena y, para actualizarlo, necesitaba una nueva camarilla que necesitaba un nuevo ghc. O algo así. ( https://stackoverflow.com/a/28049104/131227 ??)

Así que borré todo, e instalé desde http://ghcformacosx.github.io/ . Luego, un extraño fallo al configurar una nueva caja de arena se debió a que algo no tenía una dependencia adecuada para ser feliz. ( https://github.com/haskell-suite/haskell-src-exts/issues/14 )

De acuerdo. Instalado feliz. Ahora estoy intentando (de nuevo) instalar ghc-mod y me da un lío gigante (abajo).

¿Debo usar http://www.stackage.org/ ?
He visto a algunas personas mencionar ghc-pkg recache o cabal install cabal-install ... ¿Esas son las cosas que debo hacer?

Lío:

Resolving dependencies... Configuring ghc-mod-5.2.1.2... Building ghc-mod-5.2.1.2... Failed to install ghc-mod-5.2.1.2 Build log ( /Users/mark/.cabal/logs/ghc-mod-5.2.1.2.log ): Configuring ghc-mod-5.2.1.2... Building ghc-mod-5.2.1.2... Preprocessing library ghc-mod-5.2.1.2... Language/Haskell/GhcMod/Convert.hs:1:51: Warning: -XOverlappingInstances is deprecated: instead use per-instance pragmas OVERLAPPING/OVERLAPPABLE/OVERLAPS [ 1 of 38] Compiling Language.Haskell.GhcMod.Read ( Language/Haskell/GhcMod/Read.hs, dist/build/Language/Haskell/GhcMod/Read.o ) [ 2 of 38] Compiling Language.Haskell.GhcMod.Cabal21 ( Language/Haskell/GhcMod/Cabal21.hs, dist/build/Language/Haskell/GhcMod/Cabal21.o ) [ 3 of 38] Compiling Language.Haskell.GhcMod.Cabal18 ( Language/Haskell/GhcMod/Cabal18.hs, dist/build/Language/Haskell/GhcMod/Cabal18.o ) [ 4 of 38] Compiling Language.Haskell.GhcMod.Cabal16 ( Language/Haskell/GhcMod/Cabal16.hs, dist/build/Language/Haskell/GhcMod/Cabal16.o ) [ 5 of 38] Compiling Language.Haskell.GhcMod.GHCChoice ( Language/Haskell/GhcMod/GHCChoice.hs, dist/build/Language/Haskell/GhcMod/GHCChoice.o ) [ 6 of 38] Compiling Language.Haskell.GhcMod.Error ( Language/Haskell/GhcMod/Error.hs, dist/build/Language/Haskell/GhcMod/Error.o ) Language/Haskell/GhcMod/Error.hs:12:1: Warning: Module ‘Control.Monad.Error’ is deprecated: Use Control.Monad.Except instead Language/Haskell/GhcMod/Error.hs:40:10: Warning: In the use of type constructor or class ‘Error’ (imported from Control.Monad.Error, but defined in Control.Monad.Trans.Error): Deprecated: "Use Control.Monad.Trans.Except instead" Language/Haskell/GhcMod/Error.hs:40:10: Warning: In the use of type constructor or class ‘Error’ (imported from Control.Monad.Error, but defined in Control.Monad.Trans.Error): Deprecated: "Use Control.Monad.Trans.Except instead" [ 7 of 38] Compiling Language.Haskell.GhcMod.Utils ( Language/Haskell/GhcMod/Utils.hs, dist/build/Language/Haskell/GhcMod/Utils.o ) Language/Haskell/GhcMod/Utils.hs:15:1: Warning: The import of ‘Control.Applicative’ is redundant except perhaps to import instances from ‘Control.Applicative’ To import instances alone, use: import Control.Applicative() Language/Haskell/GhcMod/Utils.hs:45:51: Warning: In the use of ‘strMsg’ (imported from Language.Haskell.GhcMod.Error, but defined in Control.Monad.Trans.Error): Deprecated: "Use Control.Monad.Trans.Except instead" [ 8 of 38] Compiling Language.Haskell.GhcMod.Types ( Language/Haskell/GhcMod/Types.hs, dist/build/Language/Haskell/GhcMod/Types.o ) [ 9 of 38] Compiling Language.Haskell.GhcMod.Gap ( Language/Haskell/GhcMod/Gap.hs, dist/build/Language/Haskell/GhcMod/Gap.o ) Language/Haskell/GhcMod/Gap.hs:256:18: Not in scope: data constructor ‘ExposePackageId’ Perhaps you meant ‘ExposePackage’ (imported from DynFlags) cabal: Error: some packages failed to install: ghc-mod-5.2.1.2 failed during the building phase. The exception was: ExitFailure 1

Después de aplicar la respuesta aceptada (que parecía instalar ghc-mod), ejecutar gch-mod ofrece lo siguiente:

> ghc-mod check x.hs cabal-helper-wrapper: Installing a private copy of Cabal, this might take a while but will only happen once per Cabal version. If anything goes horribly wrong just delete this directory and try again: /Users/mark/.ghc-mod/cabal-helper If you want to avoid this automatic installation altogether install version 1.22.0.0 of Cabal manually (into your user or global package-db): $ cabal install Cabal-1.22.0.0 ...In order, the following would be installed: filepath-1.3.0.1 (latest: 1.4.0.0) (new version) directory-1.2.2.1 (new version) process-1.2.3.0 (reinstall) changes: directory-1.2.2.0 -> 1.2.2.1, filepath-1.4.0.0 -> 1.3.0.1 Cabal-1.22.0.0 (latest: 1.22.2.0) (new version) cabal: The following packages are likely to be broken by the reinstalls: ghc-7.10.1 Cabal-1.22.2.0 Use --force-reinstalls if you want to install anyway. cabal-helper-wrapper: Installing Cabal version 1.22.0.0 failed. nYou have two choices now: - Either you install this version of Cabal in your globa/luser package-db somehow n- Or you can see if you can update your cabal-install to use a different version of the Cabal library that we can build with: $ cabal install cabal-install --constraint ''Cabal > 1.22.0.0'' nTo check the version cabal-install is currently using try: $ cabal --version ghc-mod: readCreateProcess: /Users/mark/.cabal/libexec/cabal-helper-wrapper "/Users/mark/work/haskell/ixberg/dist" "entrypoints" "source-dirs" "ghc-options" "ghc-src-options" "ghc-pkg-options" "--with-ghc=ghc" "--with-ghc-pkg=ghc-pkg" "--with-cabal=cabal" (exit 1): failed

Curiosamente, quiere la versión de Cabal que está instalada actualmente:

> cabal --version cabal-install version 1.22.0.0 using version 1.22.0.0 of the Cabal library


La versión de Cabal ejecutable que se usa para configurar este proyecto debe ser la misma que la versión del paquete Cabal global.

Es más fácil instalar una versión compatible de cabal-install que Cabal siguiente manera:

$ ghc-pkg list | grep Cabal Cabal-1.22.2.0 $ cabal install cabal-install-1.22.2.0

O construya uno en la caja de arena y reemplace / sombree el original.

Entonces no te olvides de volver a configurar el proyecto con la nueva cabal :

$ cabal clean && cabal configure

Ahora el ghc-mod debería funcionar.


Si Cabal-1.22 no está registrado ( ghc-pkg list cabal ), cabal-helper-wrapper instalará una copia privada porque necesita que la biblioteca esté instalada para funcionar, pero no quiere pisar cualquier cosa que tenga. romper por actualizar Cabal directamente.

GHC para Mac OS X no registra la biblioteca de Cabal , viene con una versión de cabal-install creada en su contra.