的Pipes.Aeson庫公開以下功能:流解析在Haskell與Pipes.Aeson
decode :: (Monad m, ToJSON a) => Parser ByteString m (Either DecodingError a)
如果我使用evalStateT這個解析器和一個文件句柄作爲一個參數,一個JSON對象從文件中讀取並解析。
問題是該文件包含幾個對象(所有相同的類型),我想摺疊或減少他們閱讀。
Pipes.Parse規定:
foldAll :: Monad m => (x -> a -> x) -> x -> (x -> b) -> Parser a m b
但你可以看到它返回一個新的解析器 - 我想不出作爲參數提供第一解析器的一種方式。
它看起來像一個解析器實際上是一個StateT monad變換器中的生產者。我想知道是否有辦法從StateT中提取Producer,這樣evalStateT就可以應用到foldAll解析器和解碼器解析器中的Producer。
雖然這可能是完全錯誤的方法。
我的問題,簡而言之:
使用Pipes.Aeson解析文件時,摺疊文件中所有對象的最佳方法是什麼?
你也可以做'zoom解碼(foldAll步驟開始完成)' –
@GabrielGonzalez啊是的,我忘了也可以用'zoom'將鏡頭應用到'Parser's。 – danidiaz
@GabrielGonzalez另外,似乎使用'zoom decoding ...'會使解析錯誤更容易處理。 – danidiaz