+-- The lazy version.
+getSubBlocksLazily ∷ Integral n
+ ⇒ L.ByteString
+ → n
+ → (# [SubBlock], L.ByteString #)
+getSubBlocksLazily src 0 = (# [], src #)
+getSubBlocksLazily src !blockSize
+ = let (sub, src', consumed)
+ = runGetState get src 0
+ (# subs, src'' #)
+ = getSubBlocksLazily src' $
+ blockSize - fromIntegral consumed
+ in
+ (# sub : subs, src'' #)
+