[英]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
我的問題是:
有沒有更直接的方法將ByteString轉換為[Char]? 目前,我必須先轉換以執行(ByteString-> Word8),然后執行(Word8-> Char)
我的要求函數中的'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.