Domanda

Mi permetta di precisare fin da subito che ho una comprensione infantile di Monadi. Ho letto i vari fili su Monadi qui e ho fatto un paio di ore di studio sul concetto. Quasi non sento a mio agio con il termine, ma penso che sia giusto dire che I in generale capire che cosa un Monade è / fa.

Sono uno sviluppatore C # che sta cercando di migliorare il mio modo di lavorare. Ciò che mi avrebbe aiutato ulteriormente nel mio Monaducation è vedere una vera e propria applicazione mondo di una Monade in C # (ad esempio tramite un SelectMany LINQ () o somesuch), che è chiaramente un miglioramento rispetto ad altri modi di risolvere lo stesso tipo di problema in oldskool C #.

Qualcuno ha visto una bestia?

È stato utile?

Soluzione

Ecco un tale scenario: si vuole all'autore una libreria di analisi (un bel esempio di un DSL integrato), e si scopre che i migliori sono monadici librerie parser Combinator. Così si scrive sfruttando LINQ zuccheri sintassi all'autore codice C # che ha la stessa struttura come la grammatica della lingua che si sta analizzando, e si ottiene i vantaggi di un modello di programmazione impressionante per on-the-fly di analisi semantica e di recupero degli errori . Vedere questo blog per una descrizione.

Altri suggerimenti

Trova terne pitagoriche:

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

Ecco un tale scenario: si vuole scrivere il codice che effettua chiamate asincrone sequenziali (ad esempio IO) senza tenere discussioni, ma non si vuole scrivere il groviglio di spaghetti senza speranza che il modello di programmazione asincrona (BeginFoo / EndFoo) ti costringe in. Così si può utilizzare una monade e zuccheri LINQ e scrivere il codice che appare in linea retta, ma rilascia / interruttori discussioni in tutto. Vedere questo blog per una breve descrizione.

Un esempio sta semplificando null controlli utilizzando l'Forse Monade, come mostrato in questo articolo .

LINQ è usato in molte soluzioni (e spesso richiesto nelle questioni) qui su StackOverflow. domande di revisione con la tag LINQ e si vedrà l'utilizzo mondo reale.

Programmazione con monadi è dichiarativa, descrivendo ciò che si desidera a un livello elevato, piuttosto che i dettagli di basso livello su come generarlo.

Vedere la noreferrer esercizi alla fine del parlare dello stato-monade di Brian Beckman su Channel 9 .

Recentemente ho bloggato circa refactoring un imperativo tipico nel mondo reale codice C # (una funzione in NuGet ) al funzionale, stile monadico (più concretamente, utilizzando il Forse monade ). Ho fatto del mio meglio per farlo in piccoli passi, che spiega il razionale dietro passo, quindi penso che aiuta nella comprensione di come monadi sono utili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top