簡體   English   中英

導管流式Monad狀態

[英]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.

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