Haskell:使用Curl进行懒惰下载

问题描述 投票:4回答:3

如何使用这个package或者其他一些软件包的懒惰以及如何修复这个代码,所以它不会下载整个文件而只是下载一些字节?

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
haskell curl lazy-evaluation
3个回答
2
投票

以下应该做的伎俩:

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

...
Right body <- openURIWithOpts [CurlMaxFileSize 32] someUrl

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:所有资源管理都是完全确定的。


1
投票

我想出了这个,甚至写了一个例子application解释一切。

© www.soinside.com 2019 - 2024. All rights reserved.