2013-05-30 5 views
7

Mein Verständnis ist, dass ByteString s sind nur Listen von Vektoren von Word8 s. Diese Verpackung bietet eine bessere Speicher- und Geschwindigkeitsleistung bei binären Datenströmen. In ähnlicher Weise erhöht der Typ die Leistung auf Char Streams.Gibt es eine parametrische Version von faulen `ByteString`?

Aber was ist, wenn ich Int Streams oder Double Streams habe? Gibt es eine parametrische Version von ByteString, die mit verschiedenen Datentypen einfach zu verwenden ist? Ich nehme an, es würde nur Sinn machen, auf unboxable Typen zu verwenden.

Antwort

12

Vector ist die erste Wahl für strenge Arrays. StorableVector versucht ein ByteString -ähnlichen Schnittstelle zu sein, einschließlich faul, chunked Verhalten, und ich glaube sogar, ursprünglich als eine Verallgemeinerung des ByteString Code geschrieben wurde: http://hackage.haskell.org/package/storablevector

+1

Außerdem verwenden viele Leute faule Bytestrings und Deserialisierung, um lasy Streams von 'Int's oder' Double' zu ​​erhalten. –

1

Wenn Sie nur die "strikten" Versionen verwenden möchten, verwenden Sie vector, die Teil der Plattform ist. Vector hat sowohl unboxed als auch (vollständig generische) Box-Varianten. Vector enthält auch eine aggressive Stream Fusion hoher Qualität.

+3

ich die faule Version will. Konkret möchte ich auf eine Datenstruktur mit mehreren Gigabyte Double zugreifen können, ohne sie alle in den Speicher zu laden. –