24 votes

Trouver son chemin dans la Scalaz

Duplicata possible :
Bonne introduction de scalaz

J'aimerais en savoir plus sur Scalaz, éventuellement en utilisant Scalaz7 pour éviter de recâbler mon cerveau une fois qu'il sera déclaré stable. Mon problème est que Scalaz contient beaucoup de fonctionnalités. Bien que la plupart d'entre elles soient censées être indépendantes d'autres parties, j'aimerais avoir une vue d'ensemble de la fonctionnalité globale offerte par Scalaz et de la façon dont elle est organisée. Pour autant que je sache, Scalaz offre, entre autres, les fonctionnalités suivantes

  • Functor , Applicative y Monad traits,
  • de nouvelles monades telles que Validation (edit : il s'avère qu'il s'agit seulement d'un applicatif)
  • transformateurs de monades ( OptionT , EitherT ....)
  • Itereatee s
  • Lens es
  • Zipper s

À cela s'ajoutent de nombreuses conversions implicites et de nouveaux constructeurs tels que some qui se chevauchent avec la bibliothèque standard, mais qui peuvent être

:type Some(3) // Some[Int]
:type some(3) // Option[Int]

J'ai une connaissance de base de la plupart de ces constructions, mais je ne maîtrise aucun de ces concepts.

Avez-vous des suggestions quant à l'ordre dans lequel apprendre la bibliothèque, quelles sont les dépendances logiques entre les modules ? Plus généralement, où puis-je trouver une vue d'ensemble de la bibliothèque ?

EDIT Il semble que la plupart des réponses soient orientées vers l'apprentissage des composants de base de la programmation fonctionnelle, comme les monades, je vais donc essayer d'être plus précis. J'ai une connaissance de base de Haskell et une formation de mathématicien, donc mon problème n'est pas lié à la théorie des catégories ou à la programmation fonctionnelle de base.

Mon problème est que Scalaz est une énorme bibliothèque. Je ne sais pas où trouver, quelles méthodes sont disponibles ou utiles pour les différents types de données. Ce dont j'ai vraiment besoin, c'est d'une carte qui, par exemple, me dirait que lorsque je veux itérer sur des ressources qui ont besoin d'être éliminées, je peux vouloir considérer les itérés et le type d'opérations que je peux faire avec cela. Il s'agit plutôt d'un panorama des fonctionnalités disponibles dans la bibliothèque.

11voto

paradigmatic Points 20871

Je recommande l'excellente série Apprendre le scalaz par Eugene Yokota sur Scalaz 7. L'auteur suit la structure de Apprendre Haskell pour le bien de tous . L'approche est systématique et très pédagogique.

9voto

Travis Brown Points 56342

Mon conseil serait le suivant pas Il est préférable d'attendre d'avoir une bonne compréhension de la bibliothèque - choisissez quelques outils pour commencer et suivez les liens conceptuels au fur et à mesure que vous avancez.

Validation (qui d'ailleurs n'est pas réellement une monade ) est probablement le meilleur point de départ. Si vous avez déjà utilisé Either pour validation dans la bibliothèque standard, Validation sera à la fois familier et beaucoup plus pratique. Vous trouverez de nombreuses discussions utiles sur Validation à la fois aquí sur StackOverflow y ailleurs .

Une fois que vous êtes à l'aise avec les Validation vous devriez avoir une bonne compréhension de base de la classe de type de foncteur applicatif, qui est utile dans de nombreux autres contextes.

Monoid est un autre bon point de départ. Il s'agit d'une classe de types très simple (essentiellement une opération associative de type addition et un élément d'identité), et une fois que vous l'aurez comprise, vous verrez des monoïdes partout. Voir par exemple cette réponse (full disclosure : it's by me) montrant comment utiliser les monoïdes pour résoudre un problème qui, à première vue, ne semble pas très monoïde.

Il y a beaucoup d'autres petits outils pratiques dans Scalaz que vous pouvez utiliser sans avoir besoin de comprendre l'ensemble de l'image. Bifunctor est l'une de mes préférées - elle rend le travail avec les tuples beaucoup plus pratique en vous donnant un moyen de mapper une fonction sur l'un ou l'autre côté :

scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._

scala> def inc(i: Int) = i + 1
inc: (i: Int)Int

scala> def repeat(n: Int)(s: String) = s * n
repeat: (n: Int)(s: String)String

scala> (inc(_)) <-: (1, "a") :-> repeat(3)
res0: (Int, String) = (2,aaa)

Une fois que vous aurez acquis une bonne compréhension de quelques-uns de ces concepts, je vous conseille l'ouvrage de Brent Yorgey intitulé Typeclassopedia qui est orienté Haskell mais qui fait un travail fantastique en vous donnant juste assez de théorie des catégories et d'algèbre abstraite pour comprendre la plupart des choses que vous trouverez dans Scalaz.

6voto

ron Points 4636

Quelques-unes des vidéos que j'ai trouvées utiles :

La plupart d'entre eux comportent de superbes diapositives, mais si vous êtes un acharné, lisez-les sans la vidéo.

En outre apprendre a lire Haskell et parcourir les signatures de type L'encyclopédie des types Haskell .

5voto

Adam Rosien Points 215

Bien que je ne détournerais jamais quelqu'un des tutoriels Haskell, ils peuvent être un peu déroutants si vous êtes un développeur de style OOP et que vous ne savez pas pourquoi vous voudriez vivre dans un monde fonctionnel.

J'ai donné une conférence intitulée "scalaz pour le reste d'entre nous" qui aborde scalaz à travers des exemples que tout le monde connaît : la mémoïsation (Memo in scalaz), la validation de domaine (Validation in scalaz), etc. De cette façon, le "cas d'utilisation" est clair et on peut commencer à apprendre comment résoudre les problèmes familiers en utilisant la puissance de scalaz.

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