Pregunta

Permítanme decir por adelantado que tengo una comprensión infantil de mónadas. He leído los diversos hilos de mónadas aquí y he hecho unas cuantas horas de estudio en el concepto. Casi no me siento cómodo con el término, pero creo que es seguro decir que I general a entender lo que es una mónada es / hace.

Soy un desarrollador de C # que está mirando para mejorar la forma en que trabajo. Lo que me ayudaría más en mi Monaducation es ver una aplicación real de una Mónada en C # (es decir, a través de un SelectMany LINQ () o algo por el estilo) que es claramente una mejora con respecto a otras formas de resolver el mismo tipo de problema en la vieja escuela C #.

Alguien ha visto una bestia?

¿Fue útil?

Solución

Aquí es un tal escenario: quieres autor de un completo análisis de la biblioteca (un buen ejemplo de un DSL integrado), y se descubre que las mejores son las bibliotecas analizador combinator monádicos. Así lo escribe el aprovechamiento de los azúcares de sintaxis LINQ al autor código C # que tiene la misma estructura que la gramática de la lengua que está de análisis, y se obtiene los beneficios de un modelo de programación impresionante para en la marcha de análisis semántico y de recuperación de errores . Ver este blog para una descripción.

Otros consejos

Encuentra ternas pitagóricas:

  var r = from a in Enumerable.Range(1, 25)
          from b in Enumerable.Range(a, 25-a)
          from c in Enumerable.Range(b, 25-b)
          where a*a + b*b == c*c
          select new [] { a, b, c };

Aquí es un tal escenario: desea escribir código que hace que las llamadas asíncronas secuenciales (por ejemplo IO) sin sostener hilos, pero no desea escribir la maraña de espaguetis sin esperanza de que el modelo de programación asíncrona (BeginFoo / EndFoo) que obliga al. Por lo tanto se puede utilizar una mónada y azúcares LINQ y escribir código que se ve en línea recta mas larga / interruptores hilos en todas partes. Ver este blog para una breve descripción.

Un ejemplo está simplificando null controles usando el Tal MÓNADA como se muestra en este artículo .

LINQ se utiliza en muchas soluciones (y, a menudo solicitada en las preguntas) aquí en StackOverflow. preguntas de revisión con la etiqueta y LINQ verán uso en el mundo real.

Programación con mónadas es declarativa, describiendo lo que desea a un nivel alto en lugar de los detalles de bajo nivel de cómo generarla.

Vea la ejercicios al final de charla mónada estado de Brian Beckman en el Canal 9 .

Recientemente

blogged sobre refactorización un imperativo típica en el mundo real de código C # (una función en NuGet ) al estilo funcional, monádico (más concretamente, mediante el Tal vez mónada ). Hice lo mejor que hacerlo en pequeños pasos, explicando lo racional detrás de paso, por lo que creo que ayuda en la comprensión de cómo las mónadas son útiles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top