hGetSome :: Int -> IO.Handle -> Folding (Of ByteString) IO ()
hGetSome size h = Folding $ \construct wrap done -> 
  let go = do bs <- B.hGetSome h size
              if B.null bs then return (done ())
                           else liftM (construct . (bs :>)) go
  in wrap go
hGetSome :: Int -> IO.Handle -> Folding (Of ByteString) IO ()
hGetSome size h = Folding $ \construct wrap done -> 
  let go = do bs <- B.hGetSome h size
              if B.null bs then return (done ())
                           else liftM (construct . (bs :>)) go
  in wrap go
hGetSome size h = Folding $ \construct wrap done -> 
  let go = do bs <- B.hGetSome h size
              if B.null bs then return (done ())
                           else liftM (construct . (bs :>)) go
  in wrap go