Description
Conduit implemented on Yaftee.
Description
Please see the README on GitHub at https://github.com/YoshikuniJujo/yaftee-conduit#readme
README.md
yaftee-conduit
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE FlexibleContexts #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module TryConduit.FromOld where
import Prelude hiding (take, putStrLn)
import Control.Monad
import Control.Monad.Yaftee.Eff qualified as Eff
import Control.Monad.Yaftee.Pipe qualified as Pipe
import Control.Monad.Yaftee.Pipe.Tools qualified as PipeT
import Control.Monad.Yaftee.Pipe.IO qualified as PipeIO
import Control.Monad.Yaftee.IO qualified as IO
import Control.HigherOpenUnion qualified as U
import Data.Char
import System.IO (openFile, IOMode(..), hClose)
action :: FilePath -> IO ()
action fp = do
h <- openFile fp ReadMode
_ <- Eff.runM . Pipe.run $
PipeIO.hGetLines h Pipe.=$=
take 5 Pipe.=$=
PipeT.convert (toUpper <$>) Pipe.=$=
putStrLn
hClose h
take :: U.Member Pipe.P es => Int -> Eff.E es a a ()
take = \case
0 -> pure ()
n -> Pipe.await >>= \x -> Pipe.yield x >> take (n - 1)
putStrLn :: (U.Member Pipe.P es, U.Base IO.I es) => Eff.E es String o r
putStrLn = forever $ IO.putStrLn =<< Pipe.await