deserialization - Haskell: find out how many bytes a Get expression would consume -


i writing tool includes deserialization mechanism bachelor thesis, use get monad (data.binary.get). ran following problem:

during deserialization, there part have getter of type get a , need read bytestring of length n, n amount of bytes consumed if ran getter @ position. in other words, need know how bytes getter consume without consuming them.

there way this:

readbytes :: -> bytestring readbytes getter = safe <- lookahead getremaininglazybytestring                       let info = rungetorfail getter safe                       -- n_cb = number of consumed bytes                       case info of right (_, n_cb, _) -> getlazybytestring n_cb 

but hideous beyond description. every time method called, copies entire remainder of file.

even though doesn't seem hard problem in theory, , far monad has been capable of doing needed, cannot find better solution.

i need know how bytes getter consume without consuming them.

perhaps perform 2 calls bytesread :: int64 function, second call inside lookahead, after having parsed a value. like

bytesread1 <- bytesread  bytesread2 <- lookahead (getter *> bytesread) return (bytesread2 - bytesread1) 

i'm not sure how bytesread behaves inside lookahead, however.


Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -