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 に答える