如何使用这个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
以下应该做的伎俩:
import Network.Curl.Download
import Network.Curl.Opts
...
Right body <- openURIWithOpts [CurlMaxFileSize 32] someUrl
你可以使用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:所有资源管理都是完全确定的。
我想出了这个,甚至写了一个例子application解释一切。