33 votes

Quelle est la prochaine étape pour apprendre Haskell après monades?

J'ai été peu à peu apprendre Haskell, et même se sentir comme j'ai eu un coup de monades. Cependant, il ya encore beaucoup de la plus exotique des trucs que j'ai peine à comprendre, comme des Flèches, des Applicatifs, etc. Même si je suis à ramasser des morceaux de code Haskell j'ai vu, il serait bon de trouver un tutoriel qui explique leur filiale. (Il semble y avoir des dizaines de tutoriels sur les monades.. mais tout semble finir tout de suite après ça!)

54voto

Travis Brown Points 56342

Voici quelques ressources que j'ai trouvé utile après "obtenir le coup de" monades:

  • Comme SuperBloup noté, Brent Yorgey de Typeclassopedia est indispensable (et il n'en fait couvrir les flèches).
  • Il ya une tonne de grandes choses dans le Monde Réel Haskell qui pourrait être considéré comme "après monades": application de l'analyse, de l'errance de transformateurs, et de la STM, par exemple.
  • John Hughes "la Généralisation des Monades de Flèches" est une excellente ressource qui m'a appris autant sur les monades comme il l'a fait à propos de flèches (même si je pensais que je l'ai déjà entendu des monades quand je l'ai lu).
  • Le "Yampa Arcade" le papier est une bonne introduction à l'Fonctionnel Réactif de Programmation.
  • Sur le type de familles: j'ai trouvé le travail avec eux plus facile que de lire à leur sujet. L' espace vectoriel package est un endroit pour commencer, ou vous pouvez regarder le code de Oleg Kiselyov et Ken Shan du cours sur Haskell et la sémantique du langage naturel.
  • Choisissez un ou deux chapitres de Chris Okasaki est Purement Fonctionnelle des Structures de Données et de travailler à travers eux en détail.
  • Raymond Smullyan est Pour se Moquer d'un oiseau Moqueur est un fantastique accessibles introduction à la combinatoire logique qui va changer la façon dont vous écrivez Haskell.
  • Lire Gérard Huet de la Fonctionnelle de la Perle sur les fermetures à glissière. Le code OCaml, mais il est utile (et pas trop difficile) pour être en mesure de traduire OCaml pour Haskell dans votre tête lorsque vous travaillez par le biais de documents de ce genre.

Plus important encore, creuser dans le code de Hackage des bibliothèques de vous trouver vous-même à l'aide. Si ils font quelque chose avec la syntaxe ou d'expressions idiomatiques ou des extensions que vous ne comprenez pas, regarder.

10voto

C. A. McCann Points 56834

Concernant les classes de type:

  • Applicative est en fait plus simple qu' Monad. J'ai récemment dit quelques choses à ce sujet d'ailleurs, mais l'essentiel, c'est que c'est sur un meilleur Functors que vous pouvez soulever des fonctions dans les. Pour obtenir une sensation pour Applicative, vous pouvez essayer d'écrire quelque chose à l'aide de Parsec , sans l'aide d' do notation--mon expérience a été que applicative style fonctionne mieux que monadique simple d'analyseurs.

  • Arrows sont très abstrait façon de travailler avec des choses qui sont un peu comme des fonctions ("flèches" entre les types). Ils peuvent être difficiles à obtenir votre esprit autour jusqu'à ce que vous tombez sur quelque chose qui est naturellement Arrow-comme. À un moment, j'ai réinventé la moitié de l' Control.Arrow (mal) lors de l'écriture interactive de l'état des machines avec des boucles de rétroaction.

  • Vous n'avez pas mentionné, mais souvent sous-estimé, puissant type de classe est l'humble Monoid. Il y a beaucoup d'endroits où monoïde-comme la structure peut être trouvé. Jetez un oeil à la monoids paquet, par exemple.


Outre les classes de type, j'aimerais offrir une réponse très simple à votre question: Écrire des programmes! La meilleure façon d'apprendre est de faire, afin de choisir quelque chose d'amusant ou utile et juste d'y arriver.

En fait, la plupart des concepts abstraits--comme Arrow--aurez probablement plus de sens si vous revenez plus tard et de constater que, comme moi, ils offrent une solution de rangement à un problème que vous avez rencontré, mais n'avais même pas réalisé pourrait être prélevée sur.

Toutefois, si vous voulez quelque chose de spécifique à tirer pour, pourquoi ne pas prendre un coup d'oeil à Fonctionnel Réactif de Programmation--c'est une famille de techniques qui ont beaucoup de promesses, mais il y a beaucoup de questions ouvertes de ce que la meilleure façon de le faire est.

4voto

sclv Points 25335

Typeclasses comme Monad, Applicative, Arrow, Functor sont super et tout, et même plus grand pour changer la façon dont vous pensez à ce sujet que le code nécessairement de la commodité d'avoir des fonctions génériques sur eux. Mais il y a une idée fausse commune que la "prochaine étape" en Haskell est d'apprendre plus au sujet de typeclasses et façons de structurer le contrôle de flux. La prochaine étape est de décider ce que vous voulez écrire, et d'essayer de l'écrire, l'exploration de ce que vous avez besoin en cours de route.

Et même si vous comprenez les Monades, cela ne signifie pas que vous avez gratté la surface de ce que vous pouvez faire avec monadically code structuré. Jouer avec un analyseur de combinateur de bibliothèques, ou écrire votre propre. Découvrez pourquoi les applicative de notation est parfois plus facile pour eux. Découvrez pourquoi te limiter à applicative analyseurs pourrait être plus efficace.

Regarder de la logique ou des problèmes de mathématiques et d'explorer les moyens de mise en œuvre de mandature -- profondeur d'abord, en largeur d'abord, etc. La découverte de la différence entre ListT et LogicT et ChoiceT. Jetez un oeil à des continuations.

Ou faire quelque chose de complètement différent!

4voto

Anthony Points 3147

Et de loin, la chose la plus importante que vous pouvez faire est d'explorer plus de Hackage. Aux prises avec les différentes caractéristiques exotiques de Haskell va peut-être vous permettre de trouver de meilleures solutions à certains problèmes, tandis que les bibliothèques sur le Hackage va considérablement élargir votre ensemble d'outils.

La meilleure partie au sujet de la Haskell écosystème est que vous obtenez de l'équilibre de l'apprentissage d'une précision chirurgicale nouvelle abstraction des techniques à apprendre comment utiliser le géant buzz scies à votre disposition sur le Hackage.

4voto

sastanin Points 16061

Commencer à écrire du code. Vous apprendrez nécessaire des concepts comme vous allez.

Au-delà de la langue, à utiliser Haskell efficacement, vous avez besoin d'apprendre quelques techniques et outils. Les choses à considérer:

  • Cabale, un outil pour gérer les dépendances, de construire et de déployer Haskell applications*.
  • FFI (Foreign Interface de la Fonction) d'utiliser des bibliothèques C à partir de votre code Haskell**.
  • Hackage comme une source de d'autres bibliothèques.
  • Comment le profil et les optimiser.
  • Test automatique des cadres (QuickCheck, HUnit).

*)cabal-init aide à démarrage rapide.

**) Actuellement, mon instrument favori pour les FFI, les liaisons est - liaisons-DSL.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X