[Haskell-cafe] Mixing Unboxed Mutable Vectors and Parsers

Twan van Laarhoven twanvl at gmail.com
Tue Apr 10 22:48:31 CEST 2012


On 2012-04-07 23:35, Myles C. Maxfield wrote:
> CC: Maintainers of STMonadTrans, Vector, and JuicyPixels
>
> Hello,
> I am writing a Haskell Attoparsec parser which will modify 2-d arrays
> of small values (Word8, Int8, etc.).
>
> My first idea was to simply parse all the deltas, and later apply them
> to the input list. However, I can't do that because the value of the
> deltas depend on the value they're modifying.
>
> My first pass at this program used a function of the form:
>
> p :: [[Word8]] ->  Parser [[Word8]]
>
> This approach works, however, the program uses far too much memory.

Does the parser really need the input to determine what to do? Or is the parse 
tree the same regardless? In the latter case, you could perhaps rewrite it to

     p :: Parser ([[Word8]] -> [[Word8]])

or when working with mutable vectors

     p :: MVector s Word8 -> Parser (ST s ())

So instead of explicit deltas, the deltas can just be the function that applies 
them.


Twan



More information about the Haskell-Cafe mailing list