2011-09-14 12 views
6

Estoy usando cabal para descargar los paquetes de Haskell.¿Cómo se asignan los nombres de los paquetes de Hackage a los nombres de 'cabal install'?

las siguientes obras:

> cabal install JSON 

Se pone Text.JSON

Sin embargo, esto no funciona:

> cabal install Data.List.Key 
cabal: "Data.List.Key" is not valid syntax for a package name or package 
dependency. 

¿Cuál es el problema de sintaxis aquí? ¿Cómo hago que cabal obtenga Data.List.Key? En general, para un paquete de nombre X.Y, ¿qué nombre necesita cabal install para encontrar el paquete? (Estoy confundido por qué cabal install JSON obtiene Text.JSON, y no Foobarbaz.JSON)

+3

El nombre utilizado es solo el nombre del paquete en hackage. Para su caso 'cabal install utility-ht' debería funcionar bien. http://hackage.haskell.org/package/utility-ht-0.0.7 – is7s

+2

Creo que la confusión es que lo que Haskell llama un ** nombre de módulo ** es más o menos lo mismo que Java (y probablemente otros idiomas) llame a un ** nombre del paquete **. Un módulo de Haskell es como un paquete de Java, mientras que un paquete de Haskell se parece más a lo que el mundo de Java llamaría una biblioteca o proyecto. – MatrixFrog

+0

@MatrixFrog - sí, eso fue algo que me confundió. ¡Gracias! –

Respuesta

12

El comando cabal install usa nombres de paquetes. Los nombres de los paquetes son diferentes de los nombres de los módulos. Si mira en el hackage page for the text package, verá que el nombre del paquete es "texto", pero exporta un módulo llamado Data.Text (entre otros). Los paquetes pueden exportar cualquier cantidad de módulos y no tiene que haber ninguna relación entre el nombre del paquete y el nombre de los módulos que exporta.

Si conoce un paquete que desea, pero no conoce los módulos exportados, mire en la página de pirateo para ese paquete. Para hacer esto, voy a "http://hackage.haskell.org/package/" en mi navegador. He ido allí muchas veces, se completa automáticamente muy rápido, luego agrego el nombre del paquete al final de esa url. Si no conozco el nombre exacto del paquete, simplemente voy a esa página y busco en la lista de paquetes lo que quiero.

La situación inversa en la que sabe qué módulo quiere pero no sabe qué paquete le proporciona es un poco más difícil. En este caso, confío en dos maravillosos motores de búsqueda Haskell: Hoogle y Hayoo.

+1

Además, una simple búsqueda en Google con 'site: hackage.haskell.org' generalmente hace un trabajo decente para encontrar paquetes. (Aunque debido al PageRank, tiende a dirigirlo a versiones anteriores de los paquetes). – hammar

Cuestiones relacionadas