2010-11-22 27 views
12

Soy un novato de Haskell, tratando de realizar un ejercicio de cifrado César.¿Cómo uso una función de biblioteca Haskell?

En un archivo de .hs, que define la siguiente función:

let2int :: Char -> Int 
let2int c = ord c - ord 'a' 

Entonces intento cargar esto en GHCi escribiendo :l caeser.hs y me sale el siguiente mensaje de error:

[1 of 1] Compiling Main    (caeser.hs, interpreted) 
caeser.hs:2:12: Not in scope: `ord' 
caeser.hs:2:20: Not in scope: `ord' 

Desde el libro que estaba usando, tuve la impresión de que ord y chr eran funciones estándar para convertir caracteres y enteros, pero parece evidente que necesito "importarlos" o algo así. ¿Cómo se hace esto?

+2

Por cierto, que mal escrito "César" – wnoise

+0

que estaba buscando para cargar una biblioteca desde la línea de comandos GHCi, he encontrado que puede utilizar este comando en la línea de comandos: ': m Data.Char' – metatron

Respuesta

3

Si utiliza hoogle para buscar ord, verá que la función vive en/es exportada por el módulo Data.Char. Tan solo importa este módulo:

import Data.Char 

Aprende a usar hoogle. Muchas de las preguntas formuladas por SO Haskell son el resultado de personas que no saben nada de Hoogle ... y, a veces, tampoco deben conocer a Google (no para disuadirlo de que pregunte, pero si usa hoogle).

En el futuro, para las bibliotecas más grandes que podrían tener nombres en conflicto con las funciones existentes usted puede limitar su importación a poco la función que se preocupan por:

import Data.Char (ord) 

O importarlo qualified:

import qualified Data.Char as C 
... 
func x y = C.ord x - C.ord y 

(un tercer método, usando hiding, funciona pero detesto ese método)

+0

Revisé Hoogle, pero no sabía qué hacer con la información que recibí. Gracias. –

9

En "Haskell 2010", ord vidas en Data.Char

por lo que querrá import Data.Char o import Data.Char (ord)

En "Haskell 98", ord se pueden encontrar en el módulo Char.

Una gran herramienta para encontrar funciones y sus módulos es

http://www.haskell.org/hoogle/

Cuestiones relacionadas