12
votes

Comment utiliser une fonction de bibliothèque Haskell?

Je suis un débutant Haskell, essayant d'accomplir un exercice de César Cipher.

dans un fichier .hs code>, j'ai défini la fonction suivante: p> xxx Pré>

alors je tente de charger cela dans GHCI en tapant : l caeser.hs code> et je reçois le message d'erreur suivant: P>

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


1 commentaires

Je cherchais à charger une bibliothèque à partir de la ligne de commande GHCI, j'ai trouvé que vous pouvez utiliser cette commande à la ligne de commande: : m data.char


3 Réponses :


20
votes

Ce sont des fonctions standard, mais vous devez d'abord les importer à partir du bon module. Ajouter xxx

à ceeer.hs et il devrait fonctionner.

Voir aussi http://www.hakell.org/ghc/docs/latest/html/libries/index.html pour l'ensemble complet de bibliothèques qui expédient avec le compilateur.


2 commentaires

Est-il considéré comme une mauvaise pratique d'utiliser data.char.ord là au lieu de l'importer, esp. Si ord n'est utilisé qu'une seule fois? Je comprends que cela rend la lecture du programme plus difficile en "cacher" les importations dans le corps du programme.


@ Holyiltiz Je vous suggère de demander cela comme une question distincte, comme un compromis compliqué. La pratique habituelle consiste à importer des bibliothèques communes non qualifiées, à moins d'avoir des afflits de noms (par exemple Importer des données qualifiés.map comme m ).



4
votes

Si vous utilisez hoogle pour rechercher ORD Vous verrez que cette fonction habite / est exporté par le Data.Char module. Il suffit donc d'importer ce module: xxx

apprendre à utiliser hoogle. Beaucoup de questions de haskell demandées sont le résultat de personnes qui ne connaissent pas hoogle ... et parfois ils ne doivent pas savoir sur Google non plus (de ne pas vous décourager de demander, mais utilisez HOOGLE).

L'avenir, pour les bibliothèques plus grandes pouvant avoir des noms contradictoires avec des fonctions existantes, vous pouvez limiter votre importation à la fonction que vous vous souciez de: xxx

ou importer qualifié : xxx

(une troisième méthode utilisant masquant , fonctionne mais je déteste cette méthode)


1 commentaires

J'ai vérifié Hoogle, mais je ne savais pas quoi faire avec les informations que j'ai reçues. Merci.



9
votes

dans "haskell 2010", ord vit dans data.char

Vous voulez donc importer des données.char ou import data.char (ord)

in "haskell 98", ord peut être trouvé dans le module char .

Un excellent outil pour trouver des fonctions et leurs modules est

http://www.hakell.org/hoogle/


0 commentaires