2015-08-23 7 views
6

Un software di sviluppo appassionato noted the following:Qual è la connessione tra le funzioni del generatore e le monadi in JavaScript?

Stato attuale: compulsivamente riscrivere tutti i miei JS dopo aver effettuato il collegamento intuitivo tra le funzioni del generatore e comprensioni monade.

Mi sembrava di essermi perso qualcosa. La mia soluzione all'inferno del callback era usare qualcosa come js-csp (cioè una coda).

La mia domanda è: Qual è la connessione tra le funzioni del generatore e le monadi in JavaScript?

+0

Bene, l'autore deve aver perso qualcosa. Le funzioni del generatore non sono comprensioni di monade. – Bergi

+0

Qual è la tua opinione sui commenti successivi sul tweet originale? – hawkeye

+1

@mrmcgreg: Tranne che l'autore non utilizza generatori in quell'articolo. Sembra confonderli con gli iteratori. – Bergi

risposta

5

Non c'è nessuno.

Mentre le funzioni del generatore possono sembrare molto simili alle funzioni di comprensione (ad esempio la notazione do), non sono così generiche. Il problema principale è che i generatori ES6 sono stateful e possono essere avanzati solo una volta per continuazione. Prova a implementare la lista monad con loro e vederla fallire.

comprensioni monade veri possono essere raggiunti utilizzando un linguaggio di compilazione-to-JS che li sostiene (come LatteJs, monadic, PureScript o LispyScript), o sweet.js macros. Solitamente richiamano le callback, proprio come in Haskell.

+0

Qual è la tua opinione sui commenti successivi sul tweet originale? – hawkeye

+0

@hawkeye: quali sono i bersagli specifici? – Bergi

+0

Quello in cui l'autore originale dice "Costruisci combinatori di parser monadici con funzioni di generatore? Certo, nessun problema." e quindi link a: https://github.com/bodil/graham/blob/master/parse.js#L10 – hawkeye

1

No, la natura intuitiva percepita è tenue.

dichiarazioni rendimento successive sembrano continuazioni nidificati come in una sorta di monade concorrenza sequenziale, ma ogni successivo effetto '' in ogni monade fa non richiedono ripetute/applicazione indeterminato.

Si potrebbe implementare un'istanza di monade con i generatori, ma penso che sia per quanto riguarda la relazione (cioè non necessariamente intuitiva); le monadi sembrano molto più generali.

Il termine monad comprehension sembra fare riferimento all'implementazione di list comprehensions come monade. Vedi Comprehending Monads, (introduzione e sezione 2.2). Tuttavia, comunemente nello sviluppo di JS, 'comprensione monad', sembra essere usato in modo intercambiabile con 'monade'.

E non ho mai sentito parlare del termine "ripresa" e non riesco a trovare una definizione/base per esso.

Al momento non ho accesso a Twitter, ma forse il tuo amico sta tentando di creare una libreria lazy lodash/underscore/list-homomorphism?

+0

Qual è la tua opinione sui commenti successivi sul tweet originale? – hawkeye

+0

Anche se questo potrebbe essere un po 'schizzinoso due chiarimenti: poiché i generatori sono semplicemente fabbriche iteratore, iterabili sono il doppio degli osservabili. Inoltre i generatori non mantengono continuazioni, bensì riprende, poiché il primo dovrebbe sempre essere in posizione di coda. – ftor

+0

Questa risposta è sbagliata - Ecco una libreria che implementa la Notazione/Comprensione di monadi usando le funzioni del generatore: https://github.com/pelotom/burrido ~ Inoltre: mentre le monadi e la comprensione potrebbero non essere concetti equivalenti, sono fortemente correlate; per esempio sia la mappa che la parte flatMap di una monade possono essere recuperate usando la comprensione di monade. –

Problemi correlati