我有一个管道管道,其单子包括状态。在某一时刻,我想要一个将状态流式传输到以下状态的管道(这是我实际需要的简化版本)。
但我很难做到这一点。以下示例仅从产量中流式传输状态一次:
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")
而不是我在第一个元组位置瞄准的无限列表。
在实际应用中,状态会随着管道流而变化。
有任何想法吗?