packages feed

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