Encontrar mi camino a través de Scalaz [duplicado]


Posible Duplicado:
Buen scalaz introducción

Me gustaría aprender más sobre Scalaz, posiblemente usando Scalaz7 para evitar volver a cablear mi cerebro una vez que se declara estable. Mi problema es que Scalaz contiene mucha funcionalidad. Si bien la mayor parte de ella está destinada a ser independiente de otras partes, me gustaría tener una vista de pájaro de la funcitonalidad global ofrecida por Scalaz y cómo está organizada. Que yo sepa, Scalaz. ofrece, entre otras cosas,

  • Functor, Applicative y Monad rasgos,
  • nuevas mónadas como Validation (editar: resulta que es solo un aplicativo)
  • transformadores de mónada (OptionT, EitherT....)
  • Itereatee s
  • Lens es
  • Zipper s

Añadido a esto hay un montón de conversiones implícitas, y nuevos constructores como some que se superponen con la biblioteca estándar, pero se comportan mejor con respecto a los tipos

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

Tengo un básico comprensión de la mayoría de estas construcciones, pero no soy fluido con ninguno de los conceptos.

¿Tiene alguna sugerencia en qué orden aprender la biblioteca, qué dependencias lógicas existen entre los módulos? De manera más general, ¿dónde puedo encontrar una visión general de alto nivel de la biblioteca?

EDIT Parece que la mayoría de las respuestas están dirigidas a aprender los componentes básicos de la programación funcional, como las mónadas, por lo que trataré de ser más preciso. Tengo un básico conocimiento de Haskell y un fondo matemático, por lo que mi problema no está relacionado con la teoría de categorías o la programación funcional básica.

Mi problema es que Scalaz es una biblioteca enorme. No sé qué encontrar dónde, qué métodos están disponibles o útiles en varios tipos de datos. Lo que realmente necesito es un mapa que, por ejemplo, me diga que cuando quiero iterar sobre los recursos que necesitan ser eliminados, puede que quiera considerar iterados y qué tipo de operaciones puedo hacer con eso. Más como una panorámica de la funcionalidad disponible con la biblioteca.

Author: Community, 2012-09-12

4 answers

Yo recomendaría la excelente serie Aprender scalaz por Eugene Yokota en Scalaz 7. El autor sigue la estructura de Learn You a Haskell for Great Good . El enfoque es sistemático y muy pedagógico.

 11
Author: paradigmatic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-12 13:12:04

Mi consejo sería no esperar hasta que sientas que tienes una comprensión de alto nivel de la biblioteca-solo elige un par de herramientas para comenzar y luego sigue los enlaces conceptuales a medida que avanzas.

Validation (que por cierto no es en realidad una mónada) es probablemente el mejor lugar para comenzar. Si alguna vez ha utilizado Either para la validación en la biblioteca estándar, Validation se sentirá familiar y mucho más conveniente. Encontrarás muchas discusiones útiles de Validation ambos aquí on StackOverflow and elsewhere.

Una vez que se sienta cómodo trabajando con Validation debería tener una buena comprensión básica de la clase de tipo functor aplicativo, que es útil en muchos otros contextos.

Monoid es otro buen punto de partida. Es una clase de tipo muy simple (esencialmente solo una operación de adición asociativa y un elemento de identidad), y una vez que lo entiendas verás monoides en todas partes. Ver por ejemplo esta respuesta (revelación completa: es mía) muestra cómo usar monoides para resolver un problema que inicialmente podría no parecer muy monoide.

Hay muchas otras herramientas útiles en Scalaz que puede usar sin necesidad de comprender todo el panorama. Bifunctor es uno de mis favoritos-hace que trabajar con tuplas sea mucho más conveniente al darle una forma de mapear una función sobre cada lado:

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)

Una vez que tenga una buena comprensión práctica de algunos de estos conceptos, sugeriría la Typeclassopedia de Brent Yorgey, que está orientada a Haskell pero hace un trabajo fantástico al darte lo suficiente teoría de categorías y álgebra abstracta para entender la mayoría de las cosas que encontrarás en Scalaz.

 9
Author: Travis Brown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:27:33

Algunos de los videos que encontré útiles:

La mayoría de estos tienen grandes diapositivas, si usted es hardcore luego leerlos sin el video.

También aprendea leer Haskellfirmas de tipo y navegar por el Haskell typeclassopedia.

 6
Author: ron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-12 13:14:01

Si bien nunca rechazaría a nadie de los tutoriales de Haskell, pueden ser un poco alucinantes si eres un desarrollador de estilo OOP y no estás familiarizado con por qué querrías vivir en un mundo funcional.

Di una charla llamada "scalaz Para el resto de nosotros" que se acerca a scalaz a través de ejemplos que todo el mundo está familiarizado con: memoización (Memo en scalaz), validación de dominio (Validación en scalaz), etc. De esta manera el" caso de uso " está claro y puede empezar a aprender cómo resolver el problemas familiares usando el poder de scalaz.

 5
Author: Adam Rosien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-12 19:31:53