2011-10-06 8 views

risposta

20

ci sono almeno tre biblioteche iteratee:

  • enumeratore
  • iteratee
  • iterIO

Credo che la enumeratore biblioteca è quella preferita attualmente, a causa della sua semplicità. È anche quello che uso per i miei progetti, se ti interessa. Gli altri due pacchetti sono più flessibili e possono essere più veloci a volte, ma sono anche più complicati. Se vuoi imparare le iterate suggerisco di iniziare con l'enumeratore . È l'implementazione più diretta dell'idea originale di Oleg.

Se si dispone di un particolare caso d'uso e sono necessarie molte funzionalità con l'approccio standard iteratee, è possibile prendere in considerazione l'utilizzo del pacchetto iteratee. In scenari più complicati potresti anche provare il pacchetto iterIO, che ha un concetto leggermente diverso e più flessibile. In particolare gli iterate possono comunicare con l'enumeratore, cosa che non è possibile negli altri due pacchetti.

Se tutti e tre i pacchetti non sono abbastanza flessibili, probabilmente si desidera scrivere personalmente le proprie coroutine con il pacchetto monad-coroutine. Gli iterate e gli enumeratori sono un tipo speciale di coroutine, che possono essere composti in un certo modo. Il pacchetto monad-coroutine fornisce il tipo generale e consente di utilizzare il proprio concetto di interazione.

+3

Un lieve errore: le iterazioni di 'iteratee' possono comunicare anche con l'enumeratore. Ad esempio, questo è il modo in cui 'seek' è implementato. Tuttavia non è sofisticato come il meccanismo 'iterIO'. –

+0

@ertes, e altre proprietà, come ad es. efficienza/prestazioni? Le librerie che non usano la stessa libreria iteratee possono essere combinate? – hvr

+0

Generalmente no, le librerie non sono compatibili tra loro. – ertes