Domanda

continuazioni si può dire di essere monadi? Sono un sottoinsieme di monadi o sono semplicemente un modo di monadi attuazione?

Modifica O forse mi sono sbagliato e monadi è un concetto più astratto di continuazioni ? (Così sto davvero confrontando le mele alle arance qui)

È stato utile?

Soluzione

In breve, poiché il 'binding' di una monade prende una continuazione efficace (a lambda del 'resto del calcolo') come argomento, monadi sono continuazioni in tal senso. Il rovescio della medaglia, stile continuazione-passing può essere implementato in modo efficace in una lingua non-CPS utilizzando zuccheri sintassi monadici, come suggerito da un certo numero di collegamenti misc qui sotto.

Dal 'tutta una questione monadi' esercitazione in Haskell:

https://www.haskell.org/haskellwiki/All_About_Monads#The_Continuation_monad

Un F # continuazione Monade, utilizzato per implementare 'pausa' e 'continuare' per for-style-loop

http://cs.hubfs.net/forums/thread/9311.aspx

E esempio di applicazione di una monade continuazione di un problema in F #:

http://lorgonblog.spaces.live.com/blog /cns!701679AD17B6D310!256.entry

Altri suggerimenti

Non solo sono continuazioni monadi, ma sono una sorta di monade universale, nel senso che se si dispone di continuazioni e stato, è possibile simulare qualsiasi monade funzionale. Questo risultato impressionante, ma molto tecnico viene dalla mente impressionante e altamente tecnico di Andrzej Filinski , che ha scritto nel 1994 o giù di lì:

  

Si dimostra che ogni monade cui operazioni unitarie e di estensione sono esprimibili come termini puramente funzionali possono essere incorporati in un linguaggio call-by-value con “continuazioni componibili”.

Possono essere, anche se non hanno bisogno di essere. Mi piacerebbe ribaltare la tua domanda un po 'e dico, invece, che le monadi sono un modo di continuazioni attuazione. Ma è possibile implementare continuazioni in molti modi - si può fare un facsimile modesto ma vincolata di CPS in C #, senza troppo sforzo, ad esempio . Dai un'occhiata alla La continuazione Monade dal sito Haskell per un trattamento molto approfondita.

Una continuazione è una particolare funzione in un programma. Monadi sono di tipo costruttori.

Un tipo costruttore Cont<T> per continuazioni prendere tipo T non sarebbe una monade.

Tuttavia, Cont<Cont<T>> è una monade, e questo è quello che viene comunemente chiamato "la continuazione monade".

(avendo callcc in una lingua equivale a essere in grado di convertire da <=> a <=>).

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