Sono interessato alla creazione di un nuovo tipo di contenitore Haskell (elenchi rigorosi) e desidero assicurarmi che le operazioni su di essi siano idonee per la fusione del flusso. Come faccio a opt-in per la funzionalità di streaming stream di ghc?Come creare i contenitori Haskell che si fondono?
Se il mio contenitore è Traversable
, si fonderà automaticamente? Se ho implementato, per esempio, mapAccumL
in termini di toList
, Haskell sarà abbastanza intelligente da non convertire affatto il contenitore in un Elenco, invece semplicemente operando sulla rappresentazione sottostante?
Se si desidera una comprensione approfondita, guardare oltre il [carta di fusione flusso] (http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.104.7401). – luqui
ghc non implementa la fusione del flusso. Implementa la fusione foldr/build. La differenza principale è che i concat sono fusibili solo attraverso la fusione foldr/build (sebbene la ricerca sia in corso), mentre le cerniere sono fusibili solo tramite fusione destroy/unfoldr (a cui la fusione del flusso è strettamente correlata). –