0O.    To a , the requested amount of  'Word8'\'s flows from a  . The 6 requested amount is guaranteed to be no greater than . From a /, data up to the requested amount flows into a  . The  exact amount of  'Word8'\'3s that flowed is returned. The requested amount is " guaranteed to be no greater than . !The size of one chunk of data. A     given to a  or  * is guaranteed to have room for this many  'Word8'\'s, but no more. portable experimental,Matti Niemenmaa <matti.niemenmaa+web@iki.fi>HPipes the contents of the first file to the second file through all the  programs named. IThe working directory used is the directory component of the path to the  first file. Pipes data from the  to the $ through all the commands named, in  the given working directory. GBe careful! All IO is at the byte level: this means that piping even a  String such as "foo"5 will result in the raw UTF-32 moving: the bytes (in N my case; I believe this is implementation-dependent) in question are not the  ASCII [102, 111, 111] but rather ([102, 0, 0, 0, 111, 0, 0, 0, 111, 0, 0,  0]. Note to Windows users: since  doesn't work on Windows " (it blocks despite its name, see   .http://hackage.haskell.org/trac/ghc/ticket/806), this pipeline uses a J non-constant amount of space. The amount used is linear in the amount of N data used at any point in the pipeline. So if you want to pipe 20 gibioctets M of data to a program, you better make sure you have at least said amount of K memory available. (In fact, ByteStrings are used, and their documentation 9 suggests that you might want twice that, just in case.) In addition, the  and ' classes are meant for the POSIX code: ! having to move data through the     types,  bytes at a $ time, results in extra complexity. HIf you want to do something about the above, ideally fix the GHC ticket N (probably nontrivial) and let me know so that I can activate the better code L for Windows as well. Alternatively, feel free to code an implementation of  this which works on Windows. 'A convenience function for when you don't care about the working  directory.  pipe' = pipe "." <A convenience function for the common case of piping from a  to a  . This uses the   and   functions and  thus loses information if your  s are non-ASCII. #A helper function which converts a [ ] to a  by mapping  ! over the octets. JIn most cases, when you wish to pipe data to a String, you do not want to 2 interpret the results as the raw byte pattern of  s, so you use  [ ] as the 0 type. This function handles the common case of  ASCII data simply if you'1re dealing with non-ASCII data you probably need + to handle the results in a different way. The inverse of  . Any  s greater than 255 are 3 truncated: once again, be careful with non-ASCII.    "      !"#$%&'()%*+Pipe-1.0System.Process.PipeSystem.Process.Pipe.PlumbingSinkflowInTapflowOut exhausted bufferSizefilePipepipepipe' pipeString word8ToString stringToWord8baseGHC.PtrPtrGHC.WordWord8NeedDoneMProcProc createProcGHC.IO.Handle.TexthGetBufNonBlockingisNeedonEPIPEpipeline shoveDownblockingPipeline finalPipelinetoSinkfinalizewithIgnoringSignal handlePipeGHC.BaseStringghc-prim GHC.TypesCharchr