1

私 (Haskell の初心者) は、Web ページから受け取った ByteString に対してアンパック操作を実行しようとしています。基本的に、Webページからいくつかの単語を検索したいので、ストリームをトークン化し、単語から単語を検索しようとしています。

Prelude Network.HTTP.Conduit LB> LB.unpack (simpleHttp WebLink)

しかし、私はエラーを下回っています

<interactive>:75:12: error:
• Couldn't match expected type ‘LB.ByteString’
              with actual type ‘m0 LB.ByteString’
• In the first argument of ‘LB.unpack’, namely...

ハックから、その署名が

unpack :: ByteString -> [Word8] Source
O(n) Converts a ByteString to a '[Word8]'.
4

2 に答える 2

3

simpleHttp "http://example.com"あるm ByteStringモナドmでは type です。たとえば、 typeIO ByteStringです。表記法を使用doすると、結果を得ることができます。

import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy.Char8 as LB

main :: IO ()
main = do
  res <- simpleHttp "http://example.com"
  let string = LB.unpack res
  putStr string

またはghciで、

ghci> res <- simpleHttp "http://example.com"
ghci> LB.unpack res
于 2016-11-07T18:52:58.153 に答える
2

simpleHttp WebLink値を返すモナド アクションのように見えますが、それ自体は ByteString ではありません。プロシージャを実行して値を取得する必要があります。その後、(バイト文字列であると仮定して) それをアンパックできます。

simpleHttp私が知っている手順はバイト文字列を返さないことに注意してください。型を検査するために戻り値のパターン マッチが必要になるEither場合があります。それが失敗ではなく応答メッセージである場合は、応答でさらにパターン マッチを行うことができます。

于 2016-11-07T17:50:39.627 に答える