Я пытаюсь понять каналы 4.0 и хочу преобразовать код канала. Предположим, у меня есть поток Int
s, и я хотел бы пропустить первые пять, а затем получить сумму следующих 5. Используя простые списки, это будет:
sum . take 5 . drop 5
В проводнике это будет:
drop 5
isolate 5 =$ fold (+) 0
Или как полную программу:
import Data.Conduit
import Data.Conduit.List (drop, isolate, fold)
import Prelude hiding (drop)
main :: IO ()
main = do
res <- mapM_ yield [1..20] $$ do
drop 5
isolate 5 =$ fold (+) 0
print res
Однако я не совсем уверен, как это сделать с трубами.
fold
в каналах значительно отличается от типа в каналах, из-за чего и возникает путаница. - person Michael Snoyman   schedule 25.09.2013