2013-05-30 13 views
7

Moje rozumienie jest takie, że ByteString s to tylko lista wektorów Word8 s. To opakowanie zapewnia lepszą pamięć i szybkość działania w strumieniach binarnych. Podobnie, typ Text zwiększa wydajność strumieni Char.Czy istnieje parametryczna wersja leniwego `ByteString`?

Ale co, jeśli mam strumienie Int lub Double? Czy istnieje parametryczna wersja ByteString, która jest łatwa w użyciu z różnymi typami danych? Zakładam, że miałoby to sens tylko w przypadku typów bez zawartości.

Odpowiedz

12

Vector jest wyborem dla ścisłych tablic. StorableVector próbuje być bardziej ByteString -jak interfejs, w tym leniwi, pofragmentowane zachowanie, i wierzę, że został nawet napisany pierwotnie jako uogólnienie kodu ByteString: http://hackage.haskell.org/package/storablevector

+1

Również wiele osób korzysta z leniwych bytestringów i deserializacji, aby uzyskać lasy strumieni 'Int's lub' Double's. –

1

Jeśli chcesz tylko wersję "ścisłą", użyj vector, która jest częścią platformy. Vector ma zarówno rozpakowane, jak i (w pełni generyczne) wersje pudełkowe. Wektor zawiera również agresywną, wysokiej jakości transmisję strumieniową.

+3

chcę wersję leniwy. W szczególności chcę mieć dostęp do struktury danych z kilkoma gigabajtami 'Double's bez ładowania ich wszystkich do pamięci. –