{-# LANGUAGE Rank2Types, FlexibleContexts #-}
{-# OPTIONS_HADDOCK hide #-}
module Control.Concurrent.SCC.Combinators.Sequential (
Combinators.consumeBy, Combinators.prepend, Combinators.append, Combinators.substitute,
PipeableComponentPair, (>->), Combinators.JoinableComponentPair (Combinators.sequence), join,
Combinators.sNot,
(>&), (>|),
(&&), (||),
ifs, wherever, unless, Combinators.select,
while, nestedIn,
foreach, having, havingOnly, followedBy, Combinators.even,
Combinators.first, Combinators.uptoFirst, Combinators.prefix,
Combinators.last, Combinators.lastAndAfter, Combinators.suffix,
Combinators.startOf, Combinators.endOf, (...),
Combinators.splitterToMarker, Combinators.parseRegions,
)
where
import Prelude hiding ((&&), (||), even, last, sequence)
import Data.Monoid (Monoid)
import Data.Text (Text)
import Control.Monad.Coroutine (sequentialBinder)
import Data.Monoid.Null (MonoidNull)
import Data.Monoid.Factorial (FactorialMonoid)
import Control.Concurrent.SCC.Types
import Control.Concurrent.SCC.Coercions (Coercible)
import qualified Control.Concurrent.SCC.Combinators as Combinators
import qualified Control.Concurrent.SCC.XML as XML
(>->) :: (Monad m, PipeableComponentPair m w c1 c2 c3) => c1 -> c2 -> c3
>-> :: c1 -> c2 -> c3
(>->) = PairBinder m -> c1 -> c2 -> c3
forall (m :: * -> *) w c1 c2 c3.
PipeableComponentPair m w c1 c2 c3 =>
PairBinder m -> c1 -> c2 -> c3
compose PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
join :: (Monad m, Combinators.JoinableComponentPair t1 t2 t3 m x y c1 c2 c3) => c1 -> c2 -> c3
join :: c1 -> c2 -> c3
join = PairBinder m -> c1 -> c2 -> c3
forall t1 t2 t3 (m :: * -> *) x y c1 c2 c3.
JoinableComponentPair t1 t2 t3 m x y c1 c2 c3 =>
PairBinder m -> c1 -> c2 -> c3
Combinators.join PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
(>&) :: (Monad m, Monoid x) => Splitter m x -> Splitter m x -> Splitter m x
>& :: Splitter m x -> Splitter m x -> Splitter m x
(>&) = PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, Monoid x) =>
PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.sAnd PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
(>|) :: (Monad m, Monoid x) => Splitter m x -> Splitter m x -> Splitter m x
>| :: Splitter m x -> Splitter m x -> Splitter m x
(>|) = PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, Monoid x) =>
PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.sOr PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
(&&) :: (Monad m, FactorialMonoid x) => Splitter m x -> Splitter m x -> Splitter m x
&& :: Splitter m x -> Splitter m x -> Splitter m x
(&&) = PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, FactorialMonoid x) =>
PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.pAnd PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
(||) :: (Monad m, FactorialMonoid x) => Splitter m x -> Splitter m x -> Splitter m x
|| :: Splitter m x -> Splitter m x -> Splitter m x
(||) = PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, FactorialMonoid x) =>
PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.pOr PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
ifs :: (Monad m, Monoid x, Branching c m x ()) => Splitter m x -> c -> c -> c
ifs :: Splitter m x -> c -> c -> c
ifs = PairBinder m -> Splitter m x -> c -> c -> c
forall c (m :: * -> *) x.
(Monad m, Branching c m x ()) =>
PairBinder m -> Splitter m x -> c -> c -> c
Combinators.ifs PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
wherever :: (Monad m, Monoid x) => Transducer m x x -> Splitter m x -> Transducer m x x
wherever :: Transducer m x x -> Splitter m x -> Transducer m x x
wherever = PairBinder m
-> Transducer m x x -> Splitter m x -> Transducer m x x
forall (m :: * -> *) x.
(Monad m, Monoid x) =>
PairBinder m
-> Transducer m x x -> Splitter m x -> Transducer m x x
Combinators.wherever PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
unless :: (Monad m, Monoid x) => Transducer m x x -> Splitter m x -> Transducer m x x
unless :: Transducer m x x -> Splitter m x -> Transducer m x x
unless = PairBinder m
-> Transducer m x x -> Splitter m x -> Transducer m x x
forall (m :: * -> *) x.
(Monad m, Monoid x) =>
PairBinder m
-> Transducer m x x -> Splitter m x -> Transducer m x x
Combinators.unless PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
while :: (Monad m, MonoidNull x) => Transducer m x x -> Splitter m x -> Transducer m x x
while :: Transducer m x x -> Splitter m x -> Transducer m x x
while Transducer m x x
t Splitter m x
s = PairBinder m
-> Transducer m x x
-> Splitter m x
-> Transducer m x x
-> Transducer m x x
forall (m :: * -> *) x.
(Monad m, MonoidNull x) =>
PairBinder m
-> Transducer m x x
-> Splitter m x
-> Transducer m x x
-> Transducer m x x
Combinators.while PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder Transducer m x x
t Splitter m x
s (Transducer m x x -> Splitter m x -> Transducer m x x
forall (m :: * -> *) x.
(Monad m, MonoidNull x) =>
Transducer m x x -> Splitter m x -> Transducer m x x
while Transducer m x x
t Splitter m x
s)
nestedIn :: (Monad m, MonoidNull x) => Splitter m x -> Splitter m x -> Splitter m x
nestedIn :: Splitter m x -> Splitter m x -> Splitter m x
nestedIn Splitter m x
s1 Splitter m x
s2 = PairBinder m
-> Splitter m x -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, MonoidNull x) =>
PairBinder m
-> Splitter m x -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.nestedIn PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder Splitter m x
s1 Splitter m x
s2 (Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, MonoidNull x) =>
Splitter m x -> Splitter m x -> Splitter m x
nestedIn Splitter m x
s1 Splitter m x
s2)
foreach :: (Monad m, MonoidNull x, Branching c m x ()) => Splitter m x -> c -> c -> c
foreach :: Splitter m x -> c -> c -> c
foreach = PairBinder m -> Splitter m x -> c -> c -> c
forall (m :: * -> *) x c.
(Monad m, MonoidNull x, Branching c m x ()) =>
PairBinder m -> Splitter m x -> c -> c -> c
Combinators.foreach PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
having :: (Monad m, MonoidNull x, MonoidNull y, Coercible x y) => Splitter m x -> Splitter m y -> Splitter m x
having :: Splitter m x -> Splitter m y -> Splitter m x
having = PairBinder m -> Splitter m x -> Splitter m y -> Splitter m x
forall (m :: * -> *) x y.
(Monad m, MonoidNull x, MonoidNull y, Coercible x y) =>
PairBinder m -> Splitter m x -> Splitter m y -> Splitter m x
Combinators.having PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
havingOnly :: (Monad m, MonoidNull x, MonoidNull y, Coercible x y) => Splitter m x -> Splitter m y -> Splitter m x
havingOnly :: Splitter m x -> Splitter m y -> Splitter m x
havingOnly = PairBinder m -> Splitter m x -> Splitter m y -> Splitter m x
forall (m :: * -> *) x y.
(Monad m, MonoidNull x, MonoidNull y, Coercible x y) =>
PairBinder m -> Splitter m x -> Splitter m y -> Splitter m x
Combinators.havingOnly PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
followedBy :: (Monad m, FactorialMonoid x) => Splitter m x -> Splitter m x -> Splitter m x
followedBy :: Splitter m x -> Splitter m x -> Splitter m x
followedBy = PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, FactorialMonoid x) =>
PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.followedBy PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder
(...) :: (Monad m, FactorialMonoid x) => Splitter m x -> Splitter m x -> Splitter m x
... :: Splitter m x -> Splitter m x -> Splitter m x
(...) = PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
forall (m :: * -> *) x.
(Monad m, FactorialMonoid x) =>
PairBinder m -> Splitter m x -> Splitter m x -> Splitter m x
Combinators.between PairBinder m
forall (m :: * -> *). Monad m => PairBinder m
sequentialBinder