{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Conduit as C
import Conduit.Simple
import Control.Monad.IO.Class
import Criterion.Main (defaultMain, bench, nf)
import Data.Functor.Identity
import Data.Monoid
import Data.Text as T
import Data.Text.Encoding
main :: IO ()
main = do
xs <- yieldMany [1..10] $= mapC (+2) $$ sinkList
print (xs :: [Int])
ys <- yieldMany [1..10] $$ mapC (+2) =$ sinkList
print (ys :: [Int])
zs <- yieldMany [1..10] $= dropC 5 $= mapC (+2) $$ sinkList
print (zs :: [Int])
ws <- yieldMany [1..10] $= takeC 5 $= mapC (+2) $$ sinkList
print (ws :: [Int])
us <- (sourceFile "simple-conduit.cabal" <+> sourceFile "README.md")
$= takeC 1
$$ sinkList
print (T.unpack (decodeUtf8 (Prelude.head us)))
vs <- sinkList
$ mapC (<> "Hello")
$ takeC 1
$ sourceFile "simple-conduit.cabal" <+> sourceFile "README.md"
print (T.unpack (decodeUtf8 (Prelude.head vs)))
x <- sinkList $ returnC $ sumC $ mapC (+1) $ yieldMany ([1..10] :: [Int])
print x
yieldMany ([1..10] :: [Int]) $$ mapM_C (liftIO . print)
defaultMain [
bench "centipede1" $ nf (runIdentity . useThis) ([1..1000000] :: [Int])
, bench "conduit1" $ nf (runIdentity . useThat) ([1..1000000] :: [Int])
, bench "centipede2" $ nf (runIdentity . useThis) ([1..1000000] :: [Int])
, bench "conduit2" $ nf (runIdentity . useThat) ([1..1000000] :: [Int])
]
where
useThis xs = yieldMany xs $= mapC (+2) $$ sinkList
useThat xs = C.yieldMany xs C.$= C.mapC (+2) C.$$ C.sinkList