コンジットを使用してストリーム形式のデータを解析しています。ストリームのある時点で私は12番目の要素ごとに必要とします。これを行う便利な方法はありますか?コンジットストリームのすべてのn番目の要素を保持する
私は現在、明示的にちょうど最初の要素を返すために12個の要素を待っている:それは作業を行い
get12th :: Monad m => Conduit Int m Int
get12th = loop
where
loop = do
v1 <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
_ <- await
case v1 of
Nothing -> return()
Just x -> do
yield x >> loop
が、これはそれを行うための最善の方法である場合、私は思ったんだけど。
また、現在のものを配信する前に束の要素を待つことになります( 'v1 < - await'は一番下が良いでしょう - あなたのトランポリンコールは' await'で始めるべき事柄を扱うことができます) – Alec
@アレック私はあなたが言っていることを理解しており、私は念頭に置いて解決策を持っています。しかし、「v1 < - await」を底に動かすことが問題を解決する方法はわかりません。 –
ここでは、次の要素を送信する前に余分な11要素を待ちます(11要素前に受信しました!)。 'v1 < - await'を動かすと、すぐに' v1'を送ります。 – Alec