Sadece Iteratees hakkında biraz bilgi edinmek, Data.Iteratee ve Data.Attoparsec.Iteratee kullanarak yaptığım basit bir ayrıştırıcıyı yeniden oluşturmak istedim. Yine de çok şaşırdım. Aşağıda bir dosyadan tek satırını ayrıştırabilen basit bir örneğim var. Ayrıştırıcım her seferinde bir satır okuyor, bu yüzden tamamlanana kadar yinelemeye doğru bir besleme çizgisine ihtiyacım var. Tüm bunları okuduğumu okudum, ama yinelemede/sayım yapanlarda çok fazla malzeme oldukça ilerlemiş.Attoparsec Iteratee
-- There are more imports above.
import Data.Attoparsec.Iteratee
import Data.Iteratee (joinI, run)
import Data.Iteratee.IO (defaultBufSize, enumFile)
line :: Parser ByteString -- left the implementation out (it doesn't check for
new line)
iter = parserToIteratee line
main = do
p <- liftM head getArgs
i <- enumFile defaultBufSize p $ iter
i' <- run i
print i'
Bu örnek ayrıştırmak ve birden fazla satır içeren bir dosyadan bir satır yazdırılır: Bu konularda kod parçasıdır. Özgün komut dosyası, çözümleyiciyi bir ByteStrings listesi üzerinde eşleştirdi. Ben de aynı şeyi burada yapmak isterim. Iteratee'de enumLines
buldum, ama hayatımın nasıl kullanılacağını anlayamıyorum. Belki amacını yanlış anladım?
İnanılmaz cevap, iki kez daha kazanabilseydim! Bu tüketicinin nasıl yazılacağına dair bir örnek isteyebilir miyim? Tek yapmak istediğim, basit bir örnek ise başarılı ayrıştırma sonuçlarını yazdırmak olduğunu varsayalım. –
@shintoist: Bunu şimdi ekledim. –
Mükemmel!Teşekkür ederim! –