Erstellen von Enumerates in Enumerator

9

Disclaimer: Dies wurde kürzlich auf der Haskell-Cafe-Liste gefragt. Ich entschuldige mich bei allen, die sich um die Doppelpost gekümmert haben.

Alle iteratee-Implementierungspakete, die ich kenne (z. B. iteratee , iterIO und conduit ), definieren eine enumeratee-Kompositionsfunktion, mit Ausnahme des enumerator -Pakets. Dies scheint mir eine ernsthafte Einschränkung zu sein, und dennoch scheint es relativ einfach zu implementieren:

%Vor%

Gibt es hier ein Problem, das ich vermisse? Oder ein anderer Grund für enumerator , die Enumerate-Komposition nicht zu definieren?

    
Mike Craig 29.12.2011, 23:41
quelle

1 Antwort

2

Es gibt jetzt eine neue Version (0.4.17) von enumerator , die einen (=$=) Operator mit der oben angegebenen Signatur enthält. Ich habe dem Autor des Pakets eine E-Mail geschickt, und er spricht sich dafür aus, viele vereinfachte Operatoren (wie ($=) , (=$) und jetzt (=$=) ) in das Paket aufzunehmen.

Grundsätzlich besteht das Problem darin, die übriggebliebene Eingabe zu behandeln. Der joinI Kombinator

%Vor%

verwirft die übrig gebliebene Stream a' , die von der inneren Iteratee zurückgegeben wird. Das ist kein Problem, wenn man einen Stil wie

benutzt %Vor%

wobei die übriggebliebenen Daten nur am Ende der Berechnung verworfen werden. Die Verwendung der vereinfachten Operatoren führt jedoch zu mehreren impliziten Joins, und die verbleibenden Daten werden viel schwieriger zu verfolgen. Wenn die verwendeten iteratees einfach sind (d. H. Sie hinterlassen keine übriggebliebenen Daten), ist dies kein Problem und die vereinfachten Operatoren sind sinnvoll zu verwenden.

    
Mike Craig 02.01.2012, 05:04
quelle

Tags und Links