Premiers pas avec Haskell

755

Pendant quelques jours, j'ai essayé de faire le tour du paradigme de la programmation fonctionnelle dans Haskell. Je l'ai fait en lisant des didacticiels et en regardant des captures d'écran, mais rien ne semble vraiment coller. Maintenant, en apprenant divers langages impératifs / OO (comme C, Java, PHP), les exercices ont été un bon moyen pour moi d'aller. Mais comme je ne sais pas vraiment de quoi Haskell est capable et parce qu'il y a beaucoup de nouveaux concepts à utiliser, je ne sais pas par où commencer.

Alors, comment avez-vous appris Haskell? Qu'est-ce qui vous a vraiment fait "casser la glace"? Aussi, de bonnes idées pour commencer les exercices?

50685
la source
14
tryhaskell.org
Kirk Broadhurst

Réponses:

2476

Je vais commander ce guide en fonction du niveau de compétence que vous avez à Haskell, allant d'un débutant absolu à un expert. Notez que ce processus prendra plusieurs mois (années?), Il est donc assez long.

Débutant

Premièrement, Haskell est capable de tout, avec suffisamment d'habileté. Il est très rapide (derrière seulement C et C ++ selon mon expérience), et peut être utilisé pour n'importe quoi, des simulations aux serveurs, aux guis et aux applications Web.

Cependant, certains problèmes sont plus faciles à écrire pour un débutant en Haskell que pour d'autres. Les problèmes mathématiques et les programmes de processus de liste sont de bons candidats pour cela, car ils ne nécessitent que les connaissances les plus élémentaires de Haskell pour pouvoir écrire.

Tout d'abord, quelques bons guides pour apprendre les bases de Haskell sont le tutoriel happy learn haskell et les 6 premiers chapitres de vous apprendre un haskell . En les lisant, c'est une très bonne idée de résoudre également des problèmes simples avec ce que vous savez.

Deux autres bonnes ressources sont la programmation Haskell des premiers principes et la programmation Haskell . Ils sont tous deux accompagnés d'exercices pour chaque chapitre, vous avez donc de petits problèmes simples correspondant à ce que vous avez appris dans les dernières pages.

Une bonne liste de problèmes à essayer est la page des problèmes de haskell 99 . Celles-ci commencent très basiques et deviennent plus difficiles au fur et à mesure. C'est une très bonne pratique d'en faire beaucoup, car ils vous permettent de mettre en pratique vos compétences dans les fonctions de récursivité et d'ordre supérieur. Je recommanderais d'ignorer tous les problèmes qui nécessitent un caractère aléatoire car c'est un peu plus difficile à Haskell. Cochez cette question SO au cas où vous voudriez tester vos solutions avec QuickCheck (voir Intermédiaire ci-dessous).

Une fois que vous en avez fait quelques-uns, vous pouvez passer à quelques-uns des problèmes de Project Euler . Celles-ci sont triées en fonction du nombre de personnes qui les ont terminées, ce qui est un assez bon indicateur de difficulté. Ceux-ci testent votre logique et Haskell plus que les problèmes précédents, mais vous devriez toujours pouvoir faire les premiers. Un gros avantage de Haskell avec ces problèmes est que les nombres entiers ne sont pas limités en taille. Pour résoudre certains de ces problèmes, il sera utile d'avoir lu également les chapitres 7 et 8 de vous apprendre un Haskell.

Débutant

Après cela, vous devriez avoir une assez bonne maîtrise des fonctions de récursivité et d'ordre supérieur, donc ce serait le bon moment pour commencer à résoudre des problèmes plus réels. Un très bon point de départ est Real World Haskell (livre en ligne, vous pouvez également acheter une copie papier). J'ai trouvé les premiers chapitres introduits trop rapidement pour quelqu'un qui n'avait jamais fait de programmation fonctionnelle / utilisé de récursivité auparavant. Cependant, avec la pratique que vous auriez eue en faisant les problèmes précédents, vous devriez le trouver parfaitement compréhensible.

Résoudre les problèmes du livre est un excellent moyen d'apprendre à gérer les abstractions et à créer des composants réutilisables dans Haskell. Ceci est vital pour les personnes habituées à la programmation orientée objet (oo), car les méthodes d'abstraction oo normales (classes oo) n'apparaissent pas dans Haskell (Haskell a des classes de type, mais elles sont très différentes des classes oo, plus comme des interfaces oo ). Je ne pense pas que ce soit une bonne idée de sauter des chapitres, car chacun introduit beaucoup de nouvelles idées qui sont utilisées dans les chapitres suivants.

Après un certain temps, vous arriverez au chapitre 14, le chapitre redouté des monades (dum dum dummmm). Presque tous ceux qui apprennent Haskell ont du mal à comprendre les monades, en raison de l'abstrait du concept. Je ne peux penser à aucun concept dans un autre langage aussi abstrait que les monades dans la programmation fonctionnelle. Monads permet à de nombreuses idées (telles que les opérations d'E / S, les calculs qui pourraient échouer, l'analyse, ...) d'être unifiées sous une seule idée. Ne vous découragez donc pas si, après avoir lu le chapitre sur les monades, vous ne les comprenez pas vraiment. J'ai trouvé utile de lire de nombreuses explications différentes sur les monades; chacun donne une nouvelle perspective sur le problème. Voici une très bonne liste de tutoriels monade . Je recommande vivement le All About Monads , mais les autres sont également bons.

De plus, il faut un certain temps pour que les concepts s'enracinent vraiment. Cela passe par l'utilisation, mais aussi par le temps. Je trouve que parfois dormir sur un problème aide plus que tout! Finalement, l'idée cliquera et vous vous demanderez pourquoi vous avez eu du mal à comprendre un concept qui est en réalité incroyablement simple. C'est génial quand cela arrive, et quand c'est le cas, vous pourriez trouver Haskell comme votre langage de programmation impératif préféré :)

Pour vous assurer que vous comprenez parfaitement le système de type Haskell, vous devez essayer de résoudre 20 exercices de haskell intermédiaires . Ces exercices utilisent des noms amusants de fonctions comme "velu" et "banane" et vous aident à avoir une bonne compréhension de certains concepts de programmation fonctionnelle de base si vous ne les avez pas déjà. Belle façon de passer votre soirée avec un tas de papiers recouverts de flèches, de licornes, de saucisses et de bananes à fourrure.

Intermédiaire

Une fois que vous comprenez Monads, je pense que vous avez fait la transition d'un programmeur débutant Haskell à un haskeller intermédiaire. Alors où aller d'ici? La première chose que je recommanderais (si vous ne les avez pas déjà apprises en apprenant les monades) est les différents types de monades, tels que Reader, Writer et State. Encore une fois, le monde réel Haskell et All about monads donne une grande couverture de cela. Pour compléter votre formation sur les monades, il est indispensable de se familiariser avec les transformateurs monades. Ceux-ci vous permettent de combiner différents types de monades (comme un lecteur et une monade d'état) en une seule. Cela peut sembler inutile au début, mais après les avoir utilisés pendant un certain temps, vous vous demanderez comment vous avez vécu sans eux.

Vous pouvez maintenant terminer le livre Haskell du monde réel si vous le souhaitez. Sauter des chapitres maintenant n'a plus vraiment d'importance, tant que vous avez des monades en panne. Choisissez simplement ce qui vous intéresse.

Avec les connaissances que vous possédez maintenant, vous devriez pouvoir utiliser la plupart des paquets sur cabal (enfin ceux documentés au moins ...), ainsi que la plupart des bibliothèques fournies avec Haskell. Une liste de bibliothèques intéressantes à essayer serait:

  • Parsec : pour analyser des programmes et du texte. Beaucoup mieux que d'utiliser des expressions rationnelles. Excellente documentation, a également un chapitre Haskell du monde réel.

  • QuickCheck : Un programme de test très cool. Ce que vous faites, c'est écrire un prédicat qui devrait toujours être vrai (par exemple length (reverse lst) == length lst). Vous passez ensuite le prédicat le QuickCheck, et il générera un grand nombre de valeurs aléatoires (dans ce cas des listes) et testera que le prédicat est vrai pour tous les résultats. Voir aussi le manuel en ligne .

  • HUnit : tests unitaires à Haskell.

  • gtk2hs : Le framework gui le plus populaire pour Haskell, vous permet d'écrire des applications gtk dans Haskell.

  • happstack : Un framework de développement web pour Haskell. N'utilise pas de bases de données, mais un magasin de types de données. Assez bons documents (d'autres frameworks populaires seraient snap et yesod ).

En outre, il existe de nombreux concepts (comme le concept Monade) que vous devriez éventuellement apprendre. Ce sera plus facile que d'apprendre les Monades la première fois, car votre cerveau sera habitué à gérer le niveau d'abstraction impliqué. Un Typeclassopedia est un très bon aperçu pour en savoir plus sur ces concepts de haut niveau et sur la manière dont ils s’emboîtent .

  • Applicatif: Une interface comme Monads, mais moins puissante. Chaque Monade est Applicative, mais pas l'inverse. Ceci est utile car il existe certains types qui sont applicatifs mais pas des monades. En outre, le code écrit à l'aide des fonctions applicatives est souvent plus composable que l'écriture du code équivalent à l'aide des fonctions Monad. Voir Functors, Applicative Functors et Monoids du guide Learn you a haskell.

  • Pliable , Traversable : Classes qui résument de nombreuses opérations de listes, de sorte que les mêmes fonctions peuvent être appliquées à d'autres types de conteneurs. Voir aussi l' explication du wiki haskell .

  • Monoïde : un monoïde est un type qui a une valeur nulle (ou vide) et une opération, notée, <>qui relie deux monoïdes ensemble, tels que x <> mempty = mempty <> x = xet x <> (y <> z) = (x <> y) <> z. Ces lois sont appelées lois sur l'identité et l'associativité. De nombreux types sont des monoïdes, tels que les nombres, avec mempty = 0et <> = +. Ceci est utile dans de nombreuses situations.

  • Flèches : les flèches sont un moyen de représenter les calculs qui prennent une entrée et retournent une sortie. Une fonction est le type de flèche le plus élémentaire, mais il existe de nombreux autres types. La bibliothèque possède également de nombreuses fonctions très utiles pour manipuler les flèches - elles sont très utiles même si elles ne sont utilisées qu'avec les anciennes fonctions Haskell.

  • Tableaux : les différents tableaux mutables / immuables dans Haskell.

  • ST Monad : permet d'écrire du code avec un état mutable qui s'exécute très rapidement, tout en restant pur en dehors de la monade. Voir le lien pour plus de détails.

  • FRP: Functional Reactive Programming, une nouvelle façon expérimentale d'écrire du code qui gère les événements, les déclencheurs, les entrées et les sorties (comme une interface graphique). Je ne connais cependant pas grand-chose à ce sujet. Le discours de Paul Hudak sur le yampa est un bon début.

Il y a beaucoup de nouvelles fonctionnalités linguistiques que vous devriez regarder. Je vais simplement les énumérer, vous pouvez trouver de nombreuses informations à leur sujet sur Google, le wikibook haskell , le site haskellwiki.org et la documentation ghc .

  • Classes de types multiparamètres / dépendances fonctionnelles
  • Familles de types
  • Types existentiellement quantifiés
  • Types fantômes
  • GADTS
  • autres...

Une grande partie de Haskell est basée sur la théorie des catégories , donc vous voudrez peut-être examiner cela. Un bon point de départ est la théorie des catégories pour l'informaticien . Si vous ne voulez pas acheter le livre, l' article connexe de l'auteur est également excellent.

Enfin, vous voudrez en savoir plus sur les différents outils Haskell. Ceux-ci inclus:

  • ghc (et toutes ses fonctionnalités)
  • cabale : le système de package Haskell
  • darcs : un système de contrôle de version distribué écrit en Haskell, très populaire pour les programmes Haskell.
  • haddock : un générateur de documentation automatique Haskell

Tout en apprenant toutes ces nouvelles bibliothèques et concepts, il est très utile d'écrire un projet de taille moyenne dans Haskell. Cela peut être n'importe quoi (par exemple un petit jeu, un analyseur de données, un site Web, un compilateur ). Travailler sur cela vous permettra d'appliquer bon nombre des choses que vous apprenez maintenant. Vous restez à ce niveau pendant des âges (c'est là que je suis).

Expert

Il vous faudra des années pour arriver à ce stade (bonjour de 2009!), Mais à partir d'ici, je suppose que vous commencez à écrire des articles de doctorat, de nouvelles extensions ghc et à trouver de nouvelles abstractions.

Obtenir de l'aide

Enfin, alors qu'à n'importe quel stade de l'apprentissage, il existe plusieurs endroits pour obtenir des informations. Ceux-ci sont:

  • le canal #haskell irc
  • les listes de diffusion . Ceux-ci valent la peine de s'inscrire juste pour lire les discussions qui ont lieu - certains sont très intéressants.
  • d'autres endroits répertoriés sur la page d'accueil de haskell.org

Conclusion

Eh bien, cela s'est avéré plus long que prévu ... Quoi qu'il en soit, je pense que c'est une très bonne idée de maîtriser Haskell. Cela prend beaucoup de temps, mais c'est principalement parce que vous apprenez une toute nouvelle façon de penser en le faisant. Ce n'est pas comme apprendre Ruby après avoir appris Java, mais comme apprendre Java après avoir appris C. De plus, je constate que mes compétences en programmation orientée objet se sont améliorées grâce à l'apprentissage de Haskell, car je vois de nombreuses nouvelles façons d'abstraire des idées.

David Miani
la source
35
Ouais flèches! D'abord, vous laissez les monades façonner votre cerveau, puis vous vous tenez sur votre tête et pensez aux comonades, puis vous faites les deux en même temps pour obtenir des flèches :) Il y a beaucoup de pouvoir expressif dans Haskell qui peut être ouvert avec le niveau de type la programmation aussi.
éphémère
13
@nanothief Monadest plus puissant, mais aussi moins compositionnel ... beaucoup de gens utilisent des monades où ils auraient pu s'en tirer avec un Applicativecode plus propre . La plupart des choses qui sont des Functors sont également des Monads, mais vous ne faites pas le tour en utilisant >>=et returnquand fmapcela suffira, car ce dernier conduit à un code beaucoup plus simple si vous pouvez l'utiliser.
Tom Crockett
8
@pelotom, j'ai ajouté le lien typeclassopedia ainsi que de meilleures raisons d'utiliser Applicative à cette section, et supprimé la section Functor. Il est difficile de mettre les concepts de monade et d'application dans le bon ordre en raison de l'accent mis sur les monades dans la plupart du matériel pédagogique (y compris RWH). D'un autre côté, le tutoriel vous enseigne un haskell a parcouru un long chemin depuis que j'ai écrit la réponse (près de 2 ans: O), et enseigne applicatif avant Monad, peut-être que cela devrait maintenant être la façon recommandée d'apprendre le haskell.
David Miani
2
Très bon conseil. J'ai commencé cela il y a plus d'un an et je suis à peu près au stade intermédiaire. Commentaires: le chapitre sur la monade de RWH (chapitre 14) est mal expliqué. La lecture de la version en ligne de RWH est bénéfique, car elle contient des commentaires de crowdsourcing qui aident le chapitre. FWIW, vous auriez pu inventer des monades , était le tutoriel de monade qui fonctionnait le mieux pour moi.
Tom
6
@tomf: Merci! J'ai toujours été étonné de voir à quel point cette réponse a bien fonctionné - cela fait presque cinq ans que je l'ai écrite, mais elle est toujours aussi solide. Je devrai cependant faire une mise à jour bientôt, car il est un peu dépassé. Il ne mentionne pas les lentilles, les tuyaux, les types de contraintes, la plate-forme haskell, les numéros de niveau de type, et ce sont de nouveaux sujets assez importants depuis que cela a été écrit. Vous avez raison: RWH n'est plus aussi bon, il n'a pas été mis à jour depuis longtemps et beaucoup d'exemples ne sont pas compilables. Je suis content que cela vous ait quand même été utile.
David Miani
180

Un de mes collègues avait une bonne expérience avec Learn You a Haskell for Great Good! .

Tutoriel destiné aux personnes ayant une expérience dans les langages de programmation impératifs mais n'ayant pas programmé dans un langage fonctionnel auparavant.

Et vérifiez les réponses ici aussi

gigue
la source
27
J'appuie ceci. De plus, comme il est pas évident, voici un lien vers une version pdf téléchargeable du tutoriel: learnyouahaskell.com/learnyouahaskell.pdf Le webdesign est grand, mais je voudrais avoir une copie pour le métro aussi.
Télémaque le
8
J'ai commencé avec ça, mais mon avis est que vous devriez aller directement à Real World Haskell. La différence est comme apprendre le C de K&R ou le "C pour les nuls" qui essaie d'être simple, mais qui manque des choses importantes avec son approche. Je pense qu'il vaut mieux simplement clarifier les faits au lieu d'essayer d'apprendre Haskell "de la manière impérative".
John Smith
7
J'adore ça et j'ai investi beaucoup de temps dans ce monde et dans Real World Haskell. IMO, "Learn You a Haskell" donne un aperçu plus approfondi que Real World Haskell, bien qu'ils soient tous deux d'excellentes ressources.
Charlie Flowers
7
@ abababa22 Je pense que lire d'abord LYAH puis aller à RWH est la meilleure idée. LYAH ne vous apprend pas seulement Haskell; il vous apprend la programmation fonctionnelle. Vous commencez à penser de manière fonctionnelle lorsque vous résolvez des problèmes. De toute évidence, seul LYAH ne serait pas suffisant pour écrire une grande application, mais cela vous fait réfléchir dans le bon sens. Si vous venez d'un milieu impératif, c'est le meilleur moyen, IMO
Abdulsattar Mohammed
4
@Telemachus Juste à noter: le PDF n'est pas la version finale, au moins il manque le dernier chapitre.
sdcvvc
103

Voici un bon livre que vous pouvez lire en ligne: Real World Haskell

La plupart des programmes Haskell que j'ai réalisés ont été destinés à résoudre des problèmes liés au projet Euler .

Un conseil que j'ai lu il n'y a pas si longtemps était que vous devriez avoir un ensemble standard de problèmes simples que vous savez résoudre (en théorie), puis chaque fois que vous essayez d'apprendre une nouvelle langue, vous implémentez ces problèmes dans cette langue.

David Johnstone
la source
2
Dans mon expérience, Real World Haskell est formidable, jusqu'à ce que vous atteigniez le chapitre 5. À partir de là, je ne le recommanderais pas.
MasterMastic
Pourquoi @MasterMastic? Quel est le problème au-delà du chapitre 5? J'aimerais savoir avant de dépenser l'argent.
Jay Blanchard
@JayBlanchard Au chapitre 5, vous commencez à obtenir un exemple concret d'une bibliothèque, ce qui est bien, mais ils vous disent ce qu'ils vont faire, faites-le, mais ils n'expliquent pas pourquoi entièrement, et pas clairement du tout, et il y a pas mal de littéraux hexadécimaux magiques. Vous passez simplement en revue les motions. Ce n'était pas le plus gros problème pour moi, le plus gros problème était que le livre dépend fortement de ce genre d'exemples durs et longs (assez long pour prendre plus d'un chapitre entier). Vous pouvez à peine lire les parties que vous souhaitez. Je pense que de grands auteurs, des connaissances incroyables mais une exécution extrêmement médiocre.
MasterMastic
69

Pour ajouter les réponses des autres - il y en a un qui vous aidera lors du codage (par exemple lors de la résolution des problèmes du projet Euler): Hoogle . Vous pouvez utiliser l'interface de ligne de commande ou l' interface Web .

Ligne de commande

Après avoir installé la plate-forme Haskell, assurez-vous de cabal install hoogle

Exemple d'utilisation de Hoogle:

Vous avez une fonction f x = 3 * x + 1et vous voulez l'appliquer (5 :: Int), puis l'appliquer sur le résultat et sur ce résultat et ainsi de suite et obtenir une liste infinie de ces valeurs. Vous pensez qu'il pourrait déjà exister une fonction pour vous aider (pas spécifiquement pour votre fbien).

Cette fonction serait de type (a -> a) -> a -> [a]si elle prend f 5ou a -> (a -> a) -> [a]si elle prend 5 f(nous supposons que la fonction est pour les types généraux et pas seulement Ints)

$ hoogle "a -> (a -> a) -> [a]"
Prelude iterate :: (a -> a) -> a -> [a]

oui, la fonction dont vous avez besoin existe déjà et elle s'appelle iterate. vous l'utilisez par iterate func 5!

interface Web

Le résultat pour le même exemple peut être trouvé ici .

yairchu
la source
Trouver les fonctions de bibliothèque standard pour ce dont vous avez besoin devient beaucoup plus facile une fois que vous savez comment demander à Hoogle ce dont vous avez besoin.
ankh-morpork
57

La programmation de Graham Hutton à Haskell est concise, raisonnablement approfondie, et ses années d'enseignement de Haskell le montrent vraiment. C'est presque toujours ce que je recommande aux gens de commencer, peu importe où vous allez.

En particulier, le chapitre 8 ("Analyseurs fonctionnels") fournit le véritable fondement dont vous avez besoin pour commencer à traiter avec les monades, et je pense que c'est de loin le meilleur endroit pour commencer, suivi de All About Monads . (En ce qui concerne ce chapitre, cependant, notez les errata du site Web, cependant: vous ne pouvez pas utiliser le doformulaire sans une aide spéciale. Vous voudrez peut-être d'abord vous renseigner sur les classes de caractères et résoudre ce problème par vous-même.)

Cela est rarement souligné par les débutants Haskell, mais cela vaut la peine d'apprendre assez tôt non seulement sur l'utilisation des monades, mais sur la construction de la vôtre. Ce n'est pas difficile et les tâches personnalisées peuvent simplifier un certain nombre de tâches.

Curt Sampson
la source
5
C'est un livre (et une réponse) totalement sous-estimé. Le chapitre sur les analyseurs fonctionnels, suivi d'un chapitre sur les entrées-sorties, dont aucune ne mentionne même les monades, brille vraiment comme une approche pédagogique élégante.
michiakig
52

N'essayez pas de lire tous les tutoriels de monade avec des métaphores amusantes. Ils vous embrouilleront encore plus.

John Smith
la source
5
D'accord! Voir «Abstraction, intuition et le« sophisme du tutoriel monade »»: byorgey.wordpress.com/2009/01/12/…
ShreevatsaR
31

Je suggère de rejoindre la chaîne #haskell irc et d'y poser des questions. C'est ainsi que j'ai appris Haskell. Si vous passez par Real World Haskell comme suggéré ci-dessus, les réponses en temps réel à vos questions vous aideront grandement. Beaucoup de gens intelligents sur #haskell écrivent Haskell pour le plaisir et pour le profit, vous obtiendrez donc beaucoup de bonnes contributions. Essayez!

shapr
la source
5
+1 - Pour être clair: ne l' apprenez pas uniquement avec le canal irc. Comme dans, n'entrez pas et ne demandez pas "Comment puis-je écrire un programme haskell? Comment ajouter des nombres?"
alternative
En plus de irc freenode, il y a aussi récemment une discussion animée croissante sur haskell dans les chats Discord.
truthadjustr
19

Je peux également recommander Yet Another Haskell Tutorial comme introduction.

Une autre bonne ressource d'apprentissage (probablement au niveau intermédiaire), qui m'a beaucoup aidé et n'a pas été mentionnée dans les autres réponses pour autant que je puisse voir, est Typeclassopedia de Brent Yorgey , qui se trouve dans The Monad Reader (Issue 13)

Il est écrit dans un style très accessible et contient (entre autres choses), les conseils d'introduction suivants:

Il y a deux clés à la sagesse d'un pirate Haskell expert:

  1. Comprenez les types.

  2. Acquérir une profonde intuition pour chaque classe de type et sa relation avec les autres classes de type, appuyée par la familiarité avec de nombreux exemples.

Le Monad Reader lui-même est un véritable trésor pour les programmeurs fonctionnels (pas seulement les programmeurs Haskell).

Greg S
la source
14

Essayez d'y écrire des programmes faciles.

Vous pouvez probablement trouver des exemples de tâches dans divers manuels.

Je ne recommanderais pas de m'en tenir aux manuels Haskell / FP, essayez simplement de faire des choses simples avec: calculs, manipulations de chaînes, accès aux fichiers.

Après avoir résolu une douzaine, j'ai brisé la glace :)

Après cela, lisez beaucoup sur les concepts avancés (Monades, Flèches, IO, structures de données récursives), car haskell est infini et il y en a beaucoup.

alamar
la source
14

Je pense que réaliser la fonctionnalité de Haskell par des exemples est le meilleur moyen de commencer par-dessus tout.

http://en.wikipedia.org/wiki/Haskell_98_features

Voici des classes délicates comprenant des monades et des flèches

http://www.haskell.org/haskellwiki/Typeclassopedia

pour les problèmes du monde réel et les projets plus importants, n'oubliez pas ces balises: GHC (compilateur le plus utilisé), Hackage (libraryDB), Cabal (système de construction), darcs (un autre système de construction).

Un système intégré peut vous faire gagner du temps: http://hackage.haskell.org/platform/

la base de données des packages pour ce système: http://hackage.haskell.org/

Wiki du compilateur GHC: http://www.haskell.org/haskellwiki/GHC

Après Haskell_98_features et Typeclassopedia, je pense que vous pouvez déjà trouver et lire la documentation à leur sujet

Soit dit en passant, vous voudrez peut-être tester l'extension de certaines langues de GHC qui pourrait faire partie de la norme haskell à l'avenir.

c'est ma meilleure façon d'apprendre le haskell. J'espère que cela peut vous aider.

3 tours
la source
13

Je vous suggère de commencer par lire le tutoriel de BONUS , puis de lire Real World Haskell (en ligne gratuitement) . Rejoignez le canal IRC #Haskell, sur irc.freenode.com , et posez des questions. Ces gens sont très sympathiques pour les débutants et m'ont beaucoup aidé au fil du temps. De plus, ici sur SO est un excellent endroit pour obtenir de l'aide avec des choses que vous ne pouvez pas saisir! Essayez de ne pas vous décourager, une fois qu'il cliquera, votre esprit sera époustouflé.

Le didacticiel de BONUS vous amorcera et vous préparera pour le voyage passionnant qu'apporte Real World Haskell. Je te souhaite bonne chance!

Rayne
la source
12

Si vous n'avez qu'une expérience avec les langages impératifs / OO, je suggère d'utiliser un langage fonctionnel plus conventionnel comme tremplin. Haskell est vraiment différent et vous devez comprendre de nombreux concepts différents pour arriver n'importe où. Je suggère d'aborder un langage de style ML (comme par exemple F #).

JacquesB
la source
L'orme pourrait être l'alternative la plus proche, la plus utile et la plus adaptée aux débutants ...
Pedro Rolo
1
Je ne suis pas d'accord sur le fait de passer par un itinéraire temporaire, comme F #. Pour moi, c'est comme boire une vodka, il faut la siroter rapidement. Plus douloureux de cette façon, mais le plaisir est également là. Les itinéraires temporaires ne font que créer plus de confusion pour moi.
truthadjustr
10

La première réponse est très bonne. Pour accéder au niveau Expert, vous devez faire un doctorat avec certains des Experts eux-mêmes.

Je vous suggère de visiter la page Haskell: http://haskell.org . Là vous avez beaucoup de matériel, et beaucoup de références aux trucs les plus à jour à Haskell, approuvés par la communauté Haskell.

Fidel
la source
2
Désolé, mais utiliser l'argument de doctorat ici, c'est comme dire que vous devez avoir un couteau de cuisine à 300 $ pour être un bon chef. Même Simon Peyton Jones - le père de Haskell - n'a pas de doctorat. La pratique et la persévérance est ce qui mène à l'expertise ici et dans tout autre domaine.
Petras Purlys