2つのリソースは、私は、人気のHaskellライブラリを使用してダウンロードをストリーミングするための提案のレシピがあることがわかった:Haskellのストリーミングダウンロード
- https://haskell-lang.org/library/http-client#Streaming
- http://www.alfredodinapoli.com/posts/2013-07-20-slick-http-download-in-haskell.html
がどのように私は、元のコードを変更します(a)ファイルに保存し、(b)stdoutへの応答全体ではなく、バイト応答のうちの5つだけを出力しますか?
(B)での私の試みがある:私はまだモナドの上にマッピングがどのように機能するかを理解し、またはしていない
マッピングするために失敗した#!/usr/bin/env stack
{- stack --install-ghc --resolver lts-5.13 runghc
--package http-conduit
-}
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.IO.Class (liftIO)
import qualified Data.ByteString as S
import qualified Data.Conduit.List as CL
import Network.HTTP.Simple
import System.IO (stdout)
main :: IO()
main = httpSink "http://httpbin.org/get" $ \response -> do
liftIO $ putStrLn
$ "The status code was: "
++ show (getResponseStatusCode response)
CL.mapM_ (take 5) (S.hPut stdout)
(5を取る)、そしてとりわけ私に示唆してliftIO 。また
、このリソース:
http://haskelliseasy.readthedocs.io/en/latest/#note-on-streaming
は...私は私がやっている知っていると私は、ストリーミングなどのリソースをよりきめ細かく制御したい」、私に警告を与えましたこれは容易に一般的にはサポートされていません。私が見
他の場所:
- Downloading large files from the Internet in Haskell
- https://hackage.haskell.org/package/wreq
- https://hackage.haskell.org/package/pipes-http
これが容易になりHaskellverseに何があるのならば、より多くのPythonの要求のように:
response = requests.get(URL, stream=True)
for i,chunk in enumerate(response.iter_content(BLOCK)):
f.write(chunk)
私はそこのヒントも、2016年の最先端技術を知ることができます。
これは実際にストリームする必要がありますか? (だから十分に大量のデータを一度に取得しているので、メモリ内のすべてが容認できないのですか?) – Alec
はい、してください。 – Mittenchops
私はたぶん2^nのようなより賢明なバイト数を選択したはずです。 – Mittenchops