Skip to content

Instantly share code, notes, and snippets.

@wavewave
Created June 20, 2014 01:18
Show Gist options
  • Select an option

  • Save wavewave/7a8be58b89fa81fa3870 to your computer and use it in GitHub Desktop.

Select an option

Save wavewave/7a8be58b89fa81fa3870 to your computer and use it in GitHub Desktop.
pipes: push from return value to downstream
import Control.Monad (forever)
import Pipes
import Pipes.Core
import qualified Pipes.Prelude
list2pipe :: (Monad m) => [a] -> Producer a m ()
list2pipe [] = return ()
list2pipe (x:xs) = yield x >> list2pipe xs
tuple3 :: (Monad m) => Consumer a m (a,a,a)
tuple3 = do x <- await
y <- await
z <- await
return (x,y,z)
push2down :: (Monad m) => Consumer a m b -> Pipe a b m ()
push2down c = (c >>~ \_ -> Pipes.Prelude.drain) >>= yield
main = do
runEffect $ (list2pipe [1..100] >> return undefined)
>-> forever (push2down tuple3)
>-> Pipes.Prelude.print
-- run result
-- > pipes:[wavewave@macbookair:~/repo/workspace/haskellstudy/pipes]$ ./test3
-- > (1,2,3)
-- > (4,5,6)
-- > (7,8,9)
-- > (10,11,12)
-- > (13,14,15)
-- > (16,17,18)
-- > (19,20,21)
-- > (22,23,24)
-- > (25,26,27)
-- > (28,29,30)
-- > (31,32,33)
-- > (34,35,36)
-- > (37,38,39)
-- > (40,41,42)
-- > (43,44,45)
-- > (46,47,48)
-- > (49,50,51)
-- > (52,53,54)
-- > (55,56,57)
-- > (58,59,60)
-- > (61,62,63)
-- > (64,65,66)
-- > (67,68,69)
-- > (70,71,72)
-- > (73,74,75)
-- > (76,77,78)
-- > (79,80,81)
-- > (82,83,84)
-- > (85,86,87)
-- > (88,89,90)
-- > (91,92,93)
-- > (94,95,96)
-- > (97,98,99)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment