Question

Permettez-moi de dire d'emblée que j'ai une compréhension infantile de monades. J'ai lu les différentes discussions sur Monades ici et ai fait quelques heures d'étude sur le concept. Je me sens guère à l'aise avec le terme, mais je pense qu'il est sûr de dire que je en général comprendre ce qu'est un Monad est / fait.

Je suis un développeur C # qui cherche à améliorer la façon dont je travaille. Qu'est-ce qui me aider plus loin dans mon Monaducation est de voir une application réelle d'un Monad en C # (par exemple via un SelectMany LINQ () ou somesuch) qui est clairement une amélioration par rapport d'autres façons de résoudre le même genre de problème dans oldskool C #.

Quelqu'un at-il vu une telle bête?

Était-ce utile?

La solution

Voici un tel scénario: vous voulez à l'auteur d'une bibliothèque d'analyse syntaxique (un bel exemple d'un DSL intégré), et vous découvrirez que les meilleurs sont les bibliothèques combinateur analyseur monades. Donc, vous écrivez tirant parti des sucres de syntaxe LINQ à l'auteur du code C # qui a la même structure que la grammaire de la langue que vous l'analyse syntaxique, et vous obtenez les avantages d'un modèle de programmation impressionnante pour on-the-fly analyse sémantique et de récupération d'erreur . Voir ce blog pour une description.

Autres conseils

Trouver triplets pythagoriciens:

  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 };

Voici un tel scénario: vous voulez écrire du code qui effectue des appels asynchrones séquentielle (par exemple IO) sans tenir threads, mais vous ne voulez pas écrire l'enchevêtrement sans espoir de spaghettis que le modèle de programmation asynchrone (BeginFoo / EndFoo) vous force dans. Ainsi, vous pouvez utiliser un sucres monade et LINQ et écrire du code qui ressemble en ligne droite, mais il libère / commutateurs fils partout. Voir ce blog une brève description.

Un exemple simplifie les contrôles à l'aide du null monade Peut-être comme indiqué dans cet article .

LINQ est utilisé dans de nombreuses solutions (et souvent demandés aux questions) ici sur StackOverflow. des questions d'examen avec le tag LINQ et vous verrez l'utilisation réelle du monde.

J'ai récemment blogué sur refactorisation un impératif typique monde réel code C # (fonction NuGet ) au style fonctionnel, monadique (plus concrètement, en utilisant les Peut-être monade ). Je l'ai fait de mon mieux pour le faire en petites étapes, expliquant le rationnel derrière pas, donc je pense que ça aide à comprendre comment monades sont utiles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top