4

如何在这个或其他一些包中使用惰性以及如何修复这个代码,所以它不会下载整个文件而只是一些第一个字节?

import qualified  Data.ByteString.Lazy as B
import Network.Curl.Download.Lazy

main = do
  Right body <- openLazyURI "http://www.haskell.org/ghc/dist/7.6.3/ghc-7.6.3-x86_64-unknown-linux.tar.bz2"
  return $ B.take 32 body
4

3 回答 3

3

以下应该可以解决问题:

import Network.Curl.Download
import Network.Curl.Opts

...
Right body <- openURIWithOpts [CurlMaxFileSize 32] someUrl
于 2013-10-08T14:30:09.870 回答
2

您可以使用 http-conduit 执行此操作:

import Network.HTTP.Conduit
import Data.Conduit
import qualified Data.Conduit.Binary as CB

main = withManager $ \m -> do
    req <- parseUrl "http://www.haskell.org/ghc/dist/7.6.3/ghc-7.6.3-x86_64-unknown-linux.tar.bz2"
    res <- http req m
    responseBody res $$+- CB.take 32

这里的优点是不涉及惰性 I/O:所有资源管理都是完全确定的。

于 2013-10-09T08:39:45.707 回答
1

我想通了这一点,甚至写了一个示例应用程序来解释一切。

于 2013-10-09T11:34:58.273 回答