[英]Conduit streaming monad state
我有一個管道,其monad包含狀態。 在某一點上,我想要一個將狀態流傳輸到以下狀態的管道(這是我實際需要的簡化版本)。
但是我很難做到這一點。 以下示例僅從yield流化一次狀態:
import Conduit (ConduitM, yield)
import Control.Monad.Except (Except)
import Control.Monad.State.Lazy (StateT, get)
type CondState = String
type CondMonad = StateT CondState (Except String)
passState :: ConduitM i CondState CondMonad ()
passState = do
state <- get
yield state
如果我跑步
runExcept $ (runStateT . runConduit $ yieldMany [(1::Int)..] .| passState .| sinkList) "state"
我懂了
Right (["state"], "state")
而不是我要在第一個元組位置中定位的無限列表。
在實際應用中,狀態會隨着導管的流動而變化。
有任何想法嗎?
原來解決方案是這樣的
passState = mapMC $ \_ -> do
state <- get
return state
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.