Haskell est un langage de programmation fonctionnel comprenant un typage statique fort, une évaluation paresseuse, un support étendu du parallélisme et de la concurrence, et des capacités d'abstraction uniques.

Haskellest un langage de programmation purement fonctionnel. Produit open source de plus de vingt ans de recherche, il permet le développement rapide de logiciels robustes, concis et corrects. Avec un support solide pour l'intégration avec d'autres langages, une concurrence et un parallélisme intégrés, des débogueurs, des profileurs, des bibliothèques riches et une communauté active, Haskell facilite la production de logiciels flexibles, maintenables et de haute qualité.

Liste de contrôle

Pour éviter de répondre aux mêmes questions encore et encore, veuillez consulter la liste des questions intéressantes et cette liste de contrôle:

Mélanger les tabulations et les espaces

De nombreuses erreurs mentionnant une sorte de parse error on input... sont causées par le mélange des espaces et des tabulations par l'utilisateur dans l'indentation, veuillez donc vérifier que ce n'est pas le cas. De plus, vous devriez probablement configurer votre éditeur pour convertir les tabulations en espaces.

Problèmes de vérification de type lors de la compilation

Bien que le système de type de Haskell soit très puissant, son comportement peut parfois prêter à confusion. Plus vous ajoutez de signatures de type explicites, moins il y a de possibilités pour le compilateur de déduire des relations absurdes. Les signatures de type rendent également les questions plus compréhensibles, car il est évident ce que vous voulez qu'une fonction fasse.

Les problèmes de performance

En cas de problèmes de performances, assurez-vous de compiler votre code avec les optimisations activées. Passer -O2 au compilateur fait disparaître de nombreux problèmes de performances. L'interpréteur GHC est sensiblement plus lent que l'exécution du binaire généré par le compilateur GHC.

Il peut également être utile de compiler avec -Wall afin d'observer (entre autres choses utiles) les endroits où les types numériques sont définis par défaut sur les précision arbitraireInteger, afin que vous puissiez déterminer si vous vous en sortirez avec le type de précision fixe Int plus efficace.

Il est également important de savoir quelle version du compilateur et des bibliothèques que vous utilisez. Fournir ces informations peut réduire considérablement le temps nécessaire à la communauté pour répondre à votre question.

De nombreux problèmes de performances pour les débutants découlent d'une mauvaise compréhension de ce que sont les listes et de la manière dont elles peuvent être utilisées efficacement. En particulier, ce ne sont pas des tableaux, mais ils ont la même structure que les listes chaînées dans les langages impératifs:

data List a = Cons a (List a)
            | Empty

Il est important de comprendre que [a] est un type de données algébrique imbriqué (récursif) pour soutenir une intuition quant à l'efficacité d'opérations telles que (:) vs (++), (!!), {{X4} }, etc.

Une utilisation idiomatique et efficace des listes implique la composition de fonctions telles que zip, map, filter, foldr, take, take, etc., dont beaucoup permettent le listes intermédiaires à éliminer complètement.

Le type String du Prelude est implémenté en termes de listes:

type String = [Char]

Il s'agit d'une représentation très pratique mais peu efficace en mémoire et inadaptée au traitement de texte où les performances sont un problème. À la place, la bibliothèque textdoit être utilisée.

bytestringest une interface de haut niveau similaire et rapide autour d'une chaîne (ou flux) d'octets. Le module Data.ByteString.Char8 peut être utilisé pour une représentation efficace d'un petit sous-ensemble d'unicode, par exemple lorsque seul du texte ASCII est attendu.

"Qu'est-ce que la fonction foo / opérateur #$*?"

La syntaxe de Haskell est très simple, en ce sens que tout (à l'exception des quelques mots-clés) n'est qu'une fonction de bibliothèque 1 , y compris tous les opérateurs infixes. Ces fonctions peuvent être facilement recherchées,

  • Hayoorecherche des identifiants et des signatures dans toute la base de données Hackage.
  • Hooglerecherche également des identifiants et des signatures, mais ne fonctionne que lorsque la fonction provient d'un package connu.

Veuillez d'abord essayer ces moteurs avant de poser une question comme thisou thisou this.

"Quelle bibliothèque dois-je utiliser pour <thing>?"

Ces types de questions sont généralement hors sujet, mais voici quelques ressources utiles:

Commencer

  1. Téléchargez la Haskell Platformpour votre plateforme. Cela inclut le dernier Glasgow Haskell Compiler (GHC) et des outils et bibliothèques de développement courants.
  2. Consultez ces questions sur le débordement de pile avec des liens vers des sites Web populaires et des didacticiels:
  3. Amusez-vous et posez des questions!

Questions / réponses intéressantes

Implémentations notables de Haskell

  • GHC: Glasgow Haskell Compiler, un compilateur d'optimisation pour Haskell.
  • UHC: une implémentation Haskell de l'Université d'Utrecht.
  • Hugs: un interpréteur Haskell autrefois populaire qui n'est plus géré. La plupart des gens utilisent maintenant GHCi pour le développement interactif.

Communauté

Autres endroits pour discuter de Haskell, au-delà du format de questions et réponses de Stack Overflow:

Livres de programmation Haskell gratuits

Livres de programmation Haskell

Papiers Haskell

La liste suivante est une gracieuseté de Gangadhar:

  1. Pourquoi la programmation fonctionnelle est importante
  2. Histoire de Haskell
  3. Regardez des vidéos sur Channel9 liées à la PF - mais pas toujours académique
  4. Suivez LtU
  5. N'a pas lu le journal FPde FP, mais il peut contenir des informations utiles
  6. Lecteur de monade
  7. L'article sur la composition de contrats par Simon Peyton Jones est une bonne lecture, tout comme à peu près tout de ses papierset celles de Philip Wadler.
  8. Saisie de Haskell dans Haskell- implémentation du système de base de types Haskell dans Haskell par Simon Peyton Jones

Plus d'information


1 Techniquement, il serait plus correct de dire que tout est une valeur de bibliothèque, car quelque chose comme une constante numérique ou une action IO n'est pas réellement une fonction.