簡體   English   中英

I / O Monad和ByteString轉換為Char?

[英]I/O Monad and ByteString to Char conversion?

我正在haskell中測試一些HTTP請求,並具有以下方法:

import qualified Data.ByteString.Lazy as LAZ
import  Language.Haskell.TH.Ppr
import System.IO
import Data.Word (Word8)

request :: IO LAZ.ByteString
request = do
     response <- simpleHttp "https://www.url.com"
     return (response)

exampleFunctionOne:: IO LAZ.ByteString -> IO LAZ.ByteString
exampleFunctionOne bytes = do 
     html <- bytes
     let bytesToChars = bytesToString $ LAZ.unpack html
     let x = exampleFunctionTwo bytesToChars
     bytes

exampleFunctionTwo :: [Char] -> [Char]
exampleFunctionTwo chars = --Do stuff...

main = do
  exampleFunctionOe $ request

我的問題是:

  1. 有沒有更直接的方法將ByteString轉換為[Char]? 目前,我必須先轉換以執行(ByteString-> Word8),然后執行(Word8-> Char)

  2. 我的要求函數中的'return()'語句只是將monad上下文(在本例中為IO)重新應用到我提取的值(響應<-simpleHttp)上,對嗎? 還是有其他目的?

要回答第一個問題,請注意,Data.ByteString.Lazy.Char8中有一個不同的“解壓”,帶有您想要的簽名:

unpack :: ByteString -> String

人們導入兩個模塊並不罕見:

import qualified Data.ByteString.Lazy as B
import qualified Data.ByteString.Lazy.Char8 as C

並混合和匹配每個函數。

要回答第二個問題,是的,或多或少。 例如:

redund = do x <- getLine
            y <- return x
            z <- return y
            u <- return z
            return u

全部等同於redund = getLine ,具有一堆重新包裝並將純值提取到IO monad中的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM