Comment utiliser une fonction de bibliothèque Haskell?
Je suis un Haskell débutant, essayez d'accomplir un César de chiffre d'exercice.
Dans un .hs
fichier, j'ai défini la fonction suivante:
let2int :: Char -> Int
let2int c = ord c - ord 'a'
Alors je tente de le charger dans GHCi en tapant :l caeser.hs
et j'obtiens le message d'erreur suivant:
[1 of 1] Compiling Main ( caeser.hs, interpreted )
caeser.hs:2:12: Not in scope: `ord'
caeser.hs:2:20: Not in scope: `ord'
Du livre que j'ai été en utilisant, j'ai eu l'impression que ord
et chr
ont des fonctions standard de conversion entre les caractères et les nombres entiers, mais il semble évident que j'ai besoin "d'importer" ou quelque chose. Comment est-ce fait?
source d'informationauteur Eric Wilson
Vous devez vous connecter pour publier un commentaire.
Ils sont des fonctions standard, mais vous devez les importer à partir de la droite d'abord le module. Ajouter
à ceaser.hs et cela devrait fonctionner.
Voir aussi http://www.haskell.org/ghc/docs/latest/html/libraries/index.html pour l'ensemble des bibliothèques fournies avec le compilateur.
Dans "Haskell 2010",
ord
vit dansData.Char
De sorte que vous aurez envie
import Data.Char
ouimport Data.Char (ord)
Dans "Haskell 98",
ord
peut être trouvé dans le moduleChar
.Un excellent outil pour trouver des fonctions et de leurs modules est
http://www.haskell.org/hoogle/
Si vous utilisez hoogle à la recherche pour ord vous verrez que la fonction se trouve dans /est exporté par le Les données.Char module. Donc, il suffit d'importer ce module:
Apprendre à utiliser hoogle. De nombreux Haskell questions posées à la suite de gens ne savent pas à propos de Hoogle... et parfois, ils ne doivent pas savoir sur Google (pour ne pas vous décourager de le demander, mais n'utilisez hoogle).
Dans l'avenir, pour les grandes bibliothèques qui pourraient avoir des noms en conflit avec les fonctions existantes, vous pouvez limiter votre importer simplement la fonction dont vous vous souciez:
Ou importer
qualified
:(une troisième méthode, à l'aide de
hiding
fonctionne mais j'ai horreur de cette méthode)