liblawless-0.19.0: Source/Text/Machine.hs
{-# LANGUAGE TemplateHaskell #-}
{-|
Module: Text.Machines
Description: Machines for transducing Text streams.
Copyright: © 2016 All rights reserved.
License: GPL-3
Maintainer: Evan Cofsky <>
Stability: experimental
Portability: POSIX
-}
module Text.Machine (
readLines,
writeLines
) where
import Lawless
import IO
import Text
import Text.IO
import Machine
-- | Read lines from a 'Handle' until $EOF$ is reached.
readLines ∷ MonadIO m ⇒ Handle → SourceT m Text
readLines h =
let
p = ifM (liftIO $ hIsEOF h) stop ((liftIO $ hGetLine h) >>= yield >> p)
in
construct p
-- | Write lines to a 'Handle' until there are no more. Forwards them
-- on.
writeLines ∷ MonadIO m ⇒ Handle → ProcessT m Text Text
writeLines h =
let
w = await >>= liftIO ∘ hPutStrLn h >> w
in
construct w