도관을 사용하여 일부 데이터를 스트림 방식으로 구문 분석하고 있습니다. 스트림의 어느 시점에서 나는 매 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'는 하단에서 더 나을 것입니다 - trampoline 호출은'await'으로 시작해야한다는 사실을 처리 할 수 있습니다) – Alec
@Alec 당신이 말하는 것을 이해하고 해결책을 생각하고 있습니다. 그러나, 나는'v1 <- await'을 바닥으로 움직이는 것이 어떻게 문제를 해결하는지 보지 못한다. –
여기에서 11 개의 요소를 기다렸다가 다음 요소를 보냈습니다 (11 개의 요소를 받기 전에!). 'v1 <- await'을 움직이면 곧바로'v1'을 보냅니다. – Alec