This question is regarding Streaming library. What is an efficient way to take n bytes from lazy bytestring?
What I have is an Aeson decoder that decodes lazy bytestring from network bytes. Since it will read the whole thing into memory which is fine btw, one might want to place a limit on max bytes consumed (to prevent malicious OOM attacks involving large payloads). Here is my attempt at limiting the number of bytes - in the example below, we limit the max bytes to 4: Prelude> import Data.ByteString.Streaming as SBS Prelude SBS> import Streaming as S -- to import Of constructor Prelude SBS S> :set -XBangPatterns Prelude SBS S> :set -XOverloadedStrings Prelude SBS S> (\(!x :> y) -> return x) =<< (SBS.toLazy . (SBS.take 4) . SBS.fromLazy $ "hello") "hell" Just want to check if above code can be improved in any way. Currently, I have Aeson `decode` function consuming from websocket network bytes without any limit on message size. With a "limitBytes" function like above, I can do something like below: -- before: decode x -- After the changes - if the bytes exceed the limit, rest of the bytes are dropped, aeson decode will fail and return Nothing return . decode =<< limitBytes $ x -- You received this message because you are subscribed to the Google Groups "Haskell Pipes" group. To unsubscribe from this group and stop receiving emails from it, send an email to haskell-pipes+unsubscr...@googlegroups.com. To post to this group, send email to haskell-pipes@googlegroups.com.