~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}NoneA D is a monad transformer that receives and sends information on both * an upstream and downstream interface. The type variables signify:  a' and a! - The upstream interface, where (a') s go out and (a)s  come in  b' and b# - The downstream interface, where (b) s go out and (b')s  come in  m  - The base monad  r  - The return value  is like ~, but faster. LThis is labeled as unsafe because you will break the monad transformer laws Q if you do not pass a monad morphism as the first argument. This function is = safe if you pass a monad morphism as the first argument. ?The monad transformer laws are correct when viewed through the   function:    ( ( r)) =  ( r)   ( (m  f)) =  ( m    f) LThis correctness comes at a small cost to performance, so use this function  sparingly. -This function is a convenience for low-level pipes implementers. You do  not need to use  if you stick to the safe API.  Trustworthy!Like  , but with a polymorphic type Like  , but with a polymorphic type Like , but with a polymorphic type Like , but with a polymorphic type Like , but with a polymorphic type Server b' b receives requests of type b' and sends responses of type  b.  s only  and never . Client a' a sends requests of type a' and receives responses of  type a.  s only  and never .  s can only   s can both  and   s can only  An effect in the base monad  s neither  nor  Run a self-contained ', converting it back to the base monad Send a value of type a2 downstream and block waiting for a reply of type  a' * is the identity of the respond category. +Compose two unfolds, creating a new unfold   (f  g) x = f x  g (7) is the composition operator of the respond category. (p //> f) replaces each  in p with f. Point-ful version of () Send a value of type a'0 upstream and block waiting for a reply of type a * is the identity of the request category. 'Compose two folds, creating a new fold   (f  g) x = f  g x (7) is the composition operator of the request category. (f >\\ p) replaces each  in p with f. Point-ful version of () 'Forward responses followed by requests    =        ' is the identity of the push category. "Compose two proxies blocked while ing data, creating a new proxy  blocked while  ing data   (f  g) x = f x  g (4) is the composition operator of the push category.  (p >>~ f) pairs each  in p with an  in f. Point-ful version of () (Forward requests followed by responses:    =        ' is the identity of the pull category. -Compose two proxies blocked in the middle of ing, creating a new # proxy blocked in the middle of ing   (f  g) x = f  g x (4) is the composition operator of the pull category.  (f +>> p) pairs each  in p with a  in f. Point-ful version of () (Switch the upstream and downstream ends Equivalent to () with the arguments flipped !Equivalent to () with the arguments flipped "Equivalent to () with the arguments flipped #Equivalent to () with the arguments flipped $Equivalent to () with the arguments flipped %Equivalent to () with the arguments flipped &Equivalent to () with the arguments flipped 'Equivalent to () with the arguments flipped !  !"#$%&'"  !"#$%&'"  !"&#$%'!  !"#$%&'None(Wrap the base monad in  )Run  in the base monad *!Catch an error in the base monad +9Catch an error using a catch function for the base monad ,Wrap the base monad in  -Run  in the base monad .Wrap the base monad in  /Run  in the base monad 0Wrap the base monad in  1Run  in the base monad 2 Evaluate  in the base monad 3Execute  in the base monad 4Wrap the base monad in  5Run  in the base monad 6Execute  in the base monad 7Wrap the base monad in  8Run  in the base monad 9 Evaluate  in the base monad :Execute  in the base monad ()*+,-./0123456789:()*+,-./0123456789:()*+,-./0123456789:()*+,-./0123456789: Trustworthy;; generalizes , converting effectful  containers to =s. =GThe list monad transformer, which extends a monad with non-determinism  corresponds to @, yielding a single value () corresponds to A/, calling the second computation once for each  time the first computation @s. @Produce a value  @ ::  m => a ->  x a m () A (for p body) loops over p replacing each @ with body.  A ::  m =>  b m r -> (b ->  m ()) ->  m r A ::  m =>  b m r -> (b ->  c m ()) ->  c m r A ::  m =>  x b m r -> (b ->  m ()) ->  x m r A ::  m =>  x b m r -> (b ->  c m ()) ->  x c m r A ::  m =>  x b m r -> (b ->  x m ()) ->  x m r A ::  m =>  x b m r -> (b ->  x c m ()) ->  x c m r BCompose loop bodies  (B) ::  m => (a ->  b m r) -> (b ->  m ()) -> (a ->  m r) (B) ::  m => (a ->  b m r) -> (b ->  c m ()) -> (a ->  c m r) (B) ::  m => (a ->  x b m r) -> (b ->  m ()) -> (a ->  x m r) (B) ::  m => (a ->  x b m r) -> (b ->  c m ()) -> (a ->  x c m r) (B) ::  m => (a ->  x b m r) -> (b ->  x m ()) -> (a ->  x m r) (B) ::  m => (a ->  x b m r) -> (b ->  x c m ()) -> (a ->  x c m r) C(B) with the arguments flipped DConsume a value  D ::  m =>  a y m a E (draw >~ p) loops over p replacing each D with draw  (E) ::  m =>  m b ->  b m c ->  m c (E) ::  m =>  a m b ->  b m c ->  a m c (E) ::  m =>  m b ->  b y m c ->  y m c (E) ::  m =>  a m b ->  b y m c ->  a y m c (E) ::  m =>  y m b ->  b y m c ->  y m c (E) ::  m =>  a y m b ->  b y m c ->  a y m c F(E) with the arguments flipped G The identity , analogous to the Unix cat program H2 composition, analogous to the Unix pipe operator  (H) ::  m =>  b m r ->  b m r ->  m r (H) ::  m =>  b m r ->  b c m r ->  c m r (H) ::  m =>  a b m r ->  b m r ->  a m r (H) ::  m =>  a b m r ->  b c m r ->  a c m r IConsume the first value from a  I either fails with a  if the  terminates or succeeds  with a 3 providing the next value and the remainder of the . J Convert a  to a  K Convert an ; to a  LDiscards a value M(H) with the arguments flipped ;<=>?@ABCDEFGHIJKLM$~ ;<=>?@ABCDEFGHIJKLM  @ABC DEFGHM=>?;<IJKL;<=>?@ABCDEFGHIJKLMNone0NRead s from  using  Terminates on end of input Oc values from , ignoring failed parses PRead  s from a  using  Terminates on end of input Q1Repeat a monadic action a fixed number of times, @ing each result RWrite s to  using  Unlike T, R/ gracefully terminates on a broken output pipe SS values to  TWrite s to a  using  U2Apply a function to all values flowing downstream V:Apply a monadic function to all values flowing downstream W(filter predicate)2 only forwards values that satisfy the predicate. X(filterM predicate)/ only forwards values that satisfy the monadic  predicate Y(take n) only allows n values to pass through Z (takeWhile p): allows values to pass downstream so long as they satisfy  the predicate p. [(drop n) discards n values going downstream \ (dropWhile p)9 discards values going downstream until one violates the  predicate p. ] Flatten all  elements flowing downstream ^AOutputs the indices of all elements that match the given element _AOutputs the indices of all elements that satisfied the predicate `Strict left scan aStrict, monadic left scan b1Apply an action to all values flowing downstream cParse =able values, only forwarding the value if the parse succeeds dConvert able values to s e!Strict fold of the elements of a  f*Strict, monadic fold of the elements of a  g(all predicate p)( determines whether all the elements of p satisfy the  predicate. h(any predicate p)# determines whether any element of p satisfies the  predicate. i$Determines whether all elements are  j"Determines whether any element is  k (elem a p) returns  if p has an element equal to a,   otherwise l (notElem a) returns  if p has an element equal to a,   otherwise mFind the first element of a  that satisfies the predicate n)Find the index of the first element of a  that satisfies the  predicate o"Retrieve the first element from a  p Index into a  q!Retrieve the last element from a  r"Count the number of elements in a  sFind the maximum element of a  tFind the minimum element of a  uDetermine if a  is empty v%Compute the sum of the elements of a  w)Compute the product of the elements of a  xConvert a pure  into a list yConvert an effectful  into a list Note: y is not an idiomatic use of pipes, but I provide it for ( simple testing purposes. Idiomatic pipes style consumes the elements K immediately as they are generated instead of loading all elements into  memory. zZip two s {Zip two (s using the provided combining function | Transform a  to a $ that reforwards all values further  downstream }Transform a unidirectional  to a bidirectional  6 generalize (f >-> g) = generalize f >+> generalize g   generalize cat = pull 0NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}0NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}0NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}0NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} None    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ pipes-4.0.0Pipes.Internal Pipes.Core Pipes.LiftPipes Pipes.Preludeawaityield Control.Monad>=>Pipes.TutorialProxyPureMRespondRequest unsafeHoistobserveClient'Server' Consumer' Producer'Effect'ServerClientConsumerPipeProducerEffect runEffectrespond/>///>request\>\>\\push>~>>>~pull>+>+>>reflect\<\/<~>~~<cat>->nexteacheverydiscard<-<stdinLnreadLn fromHandle replicateMstdoutLnprinttoHandlemapmapMfilterfilterMtake takeWhiledrop dropWhileconcat elemIndices findIndicesscanscanMchainreadshowfoldfoldMallanyandorelemnotElemfind findIndexheadindexlastlengthmaximumminimumnullsumproducttoListtoListMzipzipWithtee generalize mmorph-1.0.0Control.Monad.Morphhoisttransformers-0.3.0.0Control.Monad.Trans.ClassliftbaseGHC.Basereturn>>=._bind$fMonadPlusProxy$fAlternativeProxy$fMonadErroreProxy$fMonadWriterwProxy$fMonadStatesProxy$fMonadReaderrProxy$fMonadIOProxy$fMFunctorProxy$fMonadTransProxy $fMonadProxy$fApplicativeProxy$fFunctorProxyControl.Monad.Trans.ErrorErrorTControl.Monad.Trans.MaybeMaybeTControl.Monad.Trans.ReaderReaderT Control.Monad.Trans.State.StrictStateT!Control.Monad.Trans.Writer.StrictWriterTControl.Monad.Trans.RWS.StrictRWST Data.FoldableFoldableMonad Data.EitherLeftRight$fEnumerableErrorT$fEnumerableMaybeT$fEnumerableIdentityT$fEnumerableListT$fMFunctorListT$fMonadPlusListT$fAlternativeListT$fMonadIOListT$fMonadTransListT $fMonadListT$fApplicativeListT$fFunctorListTMFunctor MonadTrans void-0.6.1 Data.VoidVoidControl.Monad.IO.ClassliftIOMonadIOStringGHC.IO.Handle.FDstdin System.IOgetLineGHC.IO.Handle.TypesHandleGHC.IO.Handle.TexthGetLinestdoutputStrLn hPutStrLnGHC.ReadReadGHC.ShowShowghc-prim GHC.TypesTrueFalse