úΪ´    # -Parse the first (and possible only) PGM in a  ByteString into an array. @ If the parsing succeeds, you will still need to match on the  ! constructor to get the array.  The same as 0, but taking also returning the comments in the  PGM file as a . Precisely the same as (, but this time fetches all the PGMs in 3 the file, and returns them as a list of arrays. Same as  , but again returning comments. A wrapper around ) which also opens the file to read from. IParse all PGMs in the contents of a handle, and return them as a list of  arrays.  !"CTakes an array (which must already be coerced to have element type  #) and produces a  ByteString" encoding of that array as a PGM. Precisely the same as , but takes a  to encode into L the file header as a comment after the magic number but before the width  field. $%(Write a single array to a given handle. A wrapper around ( which opens the file to write to, then  closes it afterwards. KWrites a list of arrays to a given handle. Note that most implementations B of PGM will ignore all but the first when they read this file. A wrapper around  * which opens and closes the file to write  to.     &      !"#$%&'()*+, pgm-0.1.2 Graphics.Pgm pgmToArraypgmToArrayWithComments pgmsToArrayspgmsToArraysWithComments pgmsFromFilepgmsFromHandle arrayToPgmarrayToPgmWithComment arrayToHandle arrayToFilearraysToHandle arraysToFileDepthDepth16Depth8 magicNumberintegerwidthheightmaxValcommentcommentAwareWhiteSpace pgmHeaderpgmWithCommentspgmsWithCommentspgmpgmsbase Data.EitherRightGHC.BaseString readArray8 readArray16 readArraypairpairWithpgmHeaderStringGHC.WordWord16 arrayLiftlistToByteString