保留管道流的每个第n个元素

Tho*_*den 2 haskell conduit

我正在使用Conduit以类似流的方式解析一些数据.在流中的某个点上,我需要每12个元素.有没有方便的方法来做到这一点?

我目前正在等待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
Run Code Online (Sandbox Code Playgroud)

它确实有效,但我想知道这是否是最好的方法.

Cha*_*ert 7

你可以replicateM_用来摆脱那些重复的await行.

v1 <- await
replicateM_ 11 await
case v1 of
   ...
Run Code Online (Sandbox Code Playgroud)

  • [`drop`功能](https://www.stackage.org/haddock/lts-7.13/conduit-1.2.8/Data-Conduit-List.html#v:drop)可能是相关的. (3认同)