packages feed

iteratee 0.3.1 → 0.3.4

raw patch · 5 files changed

+55/−39 lines, 5 filessetup-changedPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Iteratee.Codecs.Tiff: TEN_BYTE :: (forall a m. (Monad m) => EnumeratorGMM [] Word8 [] Word8 m a) -> TIFFDE_ENUM
- Data.Iteratee.Codecs.Tiff: TEN_CHAR :: (forall a m. (Monad m) => EnumeratorGMM [] Word8 [] Char m a) -> TIFFDE_ENUM
- Data.Iteratee.Codecs.Tiff: TEN_INT :: (forall a m. (Monad m) => EnumeratorGMM [] Word8 [] Int m a) -> TIFFDE_ENUM
- Data.Iteratee.Codecs.Tiff: TEN_RAT :: (forall a m. (Monad m) => EnumeratorGMM [] Word8 [] (Ratio Int) m a) -> TIFFDE_ENUM
- Data.Iteratee.Codecs.Tiff: TG_ARTIST :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_BADFAXLINES :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_BITSPERSAMPLE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_CELLLENGTH :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_CELLWIDTH :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_CLEANFAXDATA :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_COLORMAP :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_COLORRESPONSECURVE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_COLORRESPONSEUNIT :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_COMPRESSION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_CONSECUTIVEBADFAXLINES :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_DATETIME :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_DOCUMENTNAME :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_FILLORDER :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_FREEBYTECOUNTS :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_FREEOFFSETS :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_GRAYRESPONSECURVE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_GRAYRESPONSEUNIT :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_GROUP3OPTIONS :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_GROUP4OPTIONS :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_HOSTCOMPUTER :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_IMAGEDESCRIPTION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_IMAGELENGTH :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_IMAGEWIDTH :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_MAKE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_MATTEING :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_MAXSAMPLEVALUE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_MINSAMPLEVALUE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_MODEL :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_ORIENTATION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_OSUBFILETYPE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_PAGENAME :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_PAGENUMBER :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_PHOTOMETRIC :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_PLANARCONFIG :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_PREDICTOR :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_PRIMARYCHROMATICITIES :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_RESOLUTIONUNIT :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_ROWSPERSTRIP :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_SAMPLESPERPIXEL :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_SOFTWARE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_STRIPBYTECOUNTS :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_STRIPOFFSETS :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_SUBFILETYPE :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_THRESHOLDING :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_WHITEPOINT :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_XPOSITION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_XRESOLUTION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_YPOSITION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_YRESOLUTION :: TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TG_other :: Int -> TIFF_TAG
- Data.Iteratee.Codecs.Tiff: TIFFDE :: Int -> TIFFDE_ENUM -> TIFFDE
- Data.Iteratee.Codecs.Tiff: TT_NONE :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_ascii :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_byte :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_double :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_float :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_long :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_rational :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_sbyte :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_short :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_slong :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_srational :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_sshort :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: TT_undefined :: TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: compute_hist :: (MonadIO m) => TIFFDict -> IterateeG [] Word8 m (Int, IntMap Int)
- Data.Iteratee.Codecs.Tiff: data TIFFDE
- Data.Iteratee.Codecs.Tiff: data TIFFDE_ENUM
- Data.Iteratee.Codecs.Tiff: data TIFF_TAG
- Data.Iteratee.Codecs.Tiff: data TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: dict_read_int :: (Monad m) => TIFF_TAG -> TIFFDict -> IterateeG [] Word8 m (Maybe Int)
- Data.Iteratee.Codecs.Tiff: dict_read_ints :: (Monad m) => TIFF_TAG -> TIFFDict -> IterateeG [] Word8 m (Maybe [Int])
- Data.Iteratee.Codecs.Tiff: dict_read_rat :: (Monad m) => TIFF_TAG -> TIFFDict -> IterateeG [] Word8 m (Maybe (Ratio Int))
- Data.Iteratee.Codecs.Tiff: dict_read_string :: (Monad m) => TIFF_TAG -> TIFFDict -> IterateeG [] Word8 m (Maybe String)
- Data.Iteratee.Codecs.Tiff: instance Bounded TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: instance Enum TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: instance Eq TIFF_TAG
- Data.Iteratee.Codecs.Tiff: instance Eq TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: instance Ord TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: instance Show TIFF_TAG
- Data.Iteratee.Codecs.Tiff: instance Show TIFF_TYPE
- Data.Iteratee.Codecs.Tiff: int_to_tag :: Int -> TIFF_TAG
- Data.Iteratee.Codecs.Tiff: load_dict :: (MonadIO m) => Endian -> IterateeG [] Word8 m (Maybe TIFFDict)
- Data.Iteratee.Codecs.Tiff: note :: (MonadIO m) => [String] -> IterateeG [] el m ()
- Data.Iteratee.Codecs.Tiff: pixel_matrix_enum :: (MonadIO m) => TIFFDict -> EnumeratorN [] Word8 [] Word8 m a
- Data.Iteratee.Codecs.Tiff: process_tiff :: (MonadIO m) => Maybe (IntMap TIFFDE) -> IterateeG [] Word8 m ()
- Data.Iteratee.Codecs.Tiff: tag_map :: (Num t) => [(TIFF_TAG, t)]
- Data.Iteratee.Codecs.Tiff: tag_map' :: IntMap TIFF_TAG
- Data.Iteratee.Codecs.Tiff: tag_to_int :: TIFF_TAG -> Int
- Data.Iteratee.Codecs.Tiff: tiff_reader :: IterateeG [] Word8 IO (Maybe TIFFDict)
- Data.Iteratee.Codecs.Tiff: tiffde_count :: TIFFDE -> Int
- Data.Iteratee.Codecs.Tiff: tiffde_enum :: TIFFDE -> TIFFDE_ENUM
- Data.Iteratee.Codecs.Tiff: type TIFFDict = IntMap TIFFDE
- Data.Iteratee.Codecs.Tiff: u16_to_s16 :: Word16 -> Int16
- Data.Iteratee.Codecs.Tiff: u32_to_float :: Word32 -> Double
- Data.Iteratee.Codecs.Tiff: u32_to_s32 :: Word32 -> Int32
- Data.Iteratee.Codecs.Tiff: u8_to_s8 :: Word8 -> Int8
- Data.Iteratee.Codecs.Tiff: verify_pixel_vals :: (MonadIO m) => TIFFDict -> [(Key, Word8)] -> IterateeG [] Word8 m ()
- Data.Iteratee.Codecs.Wave: AudioFormat :: NumChannels -> SampleRate -> BitDepth -> AudioFormat
- Data.Iteratee.Codecs.Wave: WAVEDE :: Int -> WAVE_CHUNK -> WAVEDE_ENUM -> WAVEDE
- Data.Iteratee.Codecs.Wave: WAVE_DATA :: WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: WAVE_FMT :: WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: WAVE_OTHER :: String -> WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: WEN_BYTE :: (forall a. EnumeratorGMM L Word8 L Word8 IO a) -> WAVEDE_ENUM
- Data.Iteratee.Codecs.Wave: WEN_DUB :: (forall a. EnumeratorGMM L Word8 L Double IO a) -> WAVEDE_ENUM
- Data.Iteratee.Codecs.Wave: bitDepth :: AudioFormat -> BitDepth
- Data.Iteratee.Codecs.Wave: chunkToString :: WAVE_CHUNK -> String
- Data.Iteratee.Codecs.Wave: data AudioFormat
- Data.Iteratee.Codecs.Wave: data WAVEDE
- Data.Iteratee.Codecs.Wave: data WAVEDE_ENUM
- Data.Iteratee.Codecs.Wave: data WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: dictProcessData :: Int -> WAVEDict -> IterateeG L Double IO a -> IterateeG L Word8 IO (Maybe a)
- Data.Iteratee.Codecs.Wave: dictReadData :: Int -> WAVEDict -> IterateeG L Word8 IO (Maybe [Double])
- Data.Iteratee.Codecs.Wave: dictReadFirstData :: WAVEDict -> IterateeG L Word8 IO (Maybe [Double])
- Data.Iteratee.Codecs.Wave: dictReadFirstFormat :: WAVEDict -> IterateeG L Word8 IO (Maybe AudioFormat)
- Data.Iteratee.Codecs.Wave: dictReadFormat :: Int -> WAVEDict -> IterateeG L Word8 IO (Maybe AudioFormat)
- Data.Iteratee.Codecs.Wave: dictReadLastData :: WAVEDict -> IterateeG L Word8 IO (Maybe [Double])
- Data.Iteratee.Codecs.Wave: dictReadLastFormat :: WAVEDict -> IterateeG L Word8 IO (Maybe AudioFormat)
- Data.Iteratee.Codecs.Wave: instance Enum WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: instance Eq AudioFormat
- Data.Iteratee.Codecs.Wave: instance Eq WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: instance Ord WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: instance Show AudioFormat
- Data.Iteratee.Codecs.Wave: instance Show WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: numberOfChannels :: AudioFormat -> NumChannels
- Data.Iteratee.Codecs.Wave: readRiff :: IterateeG L Word8 IO ()
- Data.Iteratee.Codecs.Wave: sampleRate :: AudioFormat -> SampleRate
- Data.Iteratee.Codecs.Wave: waveChunk :: String -> Maybe WAVE_CHUNK
- Data.Iteratee.Codecs.Wave: waveReader :: IterateeG L Word8 IO (Maybe WAVEDict)
- Data.Iteratee.Codecs.Wave: wavede_count :: WAVEDE -> Int
- Data.Iteratee.Codecs.Wave: wavede_enum :: WAVEDE -> WAVEDE_ENUM
- Data.Iteratee.Codecs.Wave: wavede_type :: WAVEDE -> WAVE_CHUNK
+ Data.Iteratee.WrappedByteString: instance StringLike (WrappedByteString Char)
- Data.Iteratee.Base: takeR :: (StreamChunk s el, Monad m) => Int -> IterateeG s el m a -> IterateeG s el m (IterateeG s el m a)
+ Data.Iteratee.Base: takeR :: (StreamChunk s el, Monad m) => Int -> EnumeratorN s el s el m a

Files

CONTRIBUTORS view
@@ -5,5 +5,7 @@ John Lato Echo Nolan Paulo Tanimoto+Magnus Therning Johan Tibell Bas van Dijk+Valery Vorotyntsev
Setup.hs view
@@ -1,3 +1,5 @@+#! /usr/bin/runhaskell+ module Main (main) where  import Distribution.Simple (defaultMain)
iteratee.cabal view
@@ -1,5 +1,5 @@ name:          iteratee-version:       0.3.1+version:       0.3.4 synopsis:      Iteratee-based I/O description:   The IterateeGM monad provides strict, safe, and functional I/O. In addition@@ -30,6 +30,10 @@   description: Build test executables.   default:     False +flag includeCodecs+  description: Build Tiff and Wave codec modules+  default:     False+ library   hs-source-dirs:     src@@ -68,12 +72,15 @@     Data.Iteratee.Base.LooseMap     Data.Iteratee.Binary     Data.Iteratee.Char-    Data.Iteratee.Codecs.Tiff-    Data.Iteratee.Codecs.Wave     Data.Iteratee.IO     Data.Iteratee.IO.Handle     Data.Iteratee.WrappedByteString +  if flag(includeCodecs)+    exposed-modules:+      Data.Iteratee.Codecs.Tiff+      Data.Iteratee.Codecs.Wave+   other-modules:     Data.Iteratee.IO.Base @@ -109,4 +116,4 @@  source-repository head   type:     darcs-  location: http://inmachina.net/~jwlato/haskell/iteratee+  location: http://tanimoto.us/~jwlato/haskell/iteratee
src/Data/Iteratee/Base.hs view
@@ -444,10 +444,9 @@ length = length' 0   where   length' = IterateeG . step-  step i (Chunk xs) = return $ Cont-                               (length' $! i + fromIntegral (LL.length xs))-                               Nothing-  step i stream     = return $ Done i stream+  step i (Chunk xs) = let a = i + (LL.length xs)+                      in a `seq` return $ Cont (length' a) Nothing+  step i stream     = return $ Done (fromIntegral i) stream   -- ---------------------------------------------------@@ -466,21 +465,20 @@ -- stream of the read elements. Unless the stream is terminated early, we -- read exactly n elements (even if the iteratee has accepted fewer). take :: (SC.StreamChunk s el, Monad m) =>-  Int ->-  EnumeratorN s el s el m a+  Int -> EnumeratorN s el s el m a take 0 iter = return iter-take n' iter = IterateeG (step n')+take n iter = IterateeG step   where-  step n chk@(Chunk str)-    | SC.null str = return $ Cont (take n iter) Nothing-    | SC.length str < n = liftM (flip Cont Nothing) inner-      where inner = liftM (check (n - SC.length str)) (runIter iter chk)-  step n (Chunk str) = done (Chunk s1) (Chunk s2)-    where (s1, s2) = SC.splitAt n str-  step _n stream            = done stream stream-  check n (Done x _)        = drop n >> return (return x)-  check n (Cont x Nothing)  = take n x-  check n (Cont _ (Just e)) = drop n >> throwErr e+  step s@(Chunk str)+    | LL.null str       = return $ Cont (take n iter) Nothing+    | LL.length str < n = liftM (flip Cont Nothing) inner+      where inner = check (n - LL.length str) `liftM` runIter iter s+  step (Chunk str) = done (Chunk s1) (Chunk s2)+    where (s1, s2) = LL.splitAt n str+  step str = done str str+  check n' (Done x _)        = drop n' >> return (return x)+  check n' (Cont x Nothing)  = take n' x+  check n' (Cont _ (Just e)) = drop n' >> throwErr e   done s1 s2 = liftM (flip Done s2) (runIter iter s1 >>= checkIfDone return)  @@ -491,23 +489,24 @@ -- of processing of the outer stream once the processing of the inner stream -- finished early. takeR :: (SC.StreamChunk s el, Monad m) =>-  Int ->-  IterateeG s el m a ->-  IterateeG s el m (IterateeG s el m a)+  Int -> EnumeratorN s el s el m a takeR 0 iter = return iter-takeR n iter = IterateeG (step n)+takeR n iter = IterateeG step   where-  step n' s@(Chunk str)+  step s@(Chunk str)     | LL.null str        = return $ Cont (takeR n iter) Nothing     | LL.length str <= n = runIter iter s >>= check (n - LL.length str)     | otherwise          = done (Chunk str1) (Chunk str2)-      where (str1, str2) = LL.splitAt n' str-  step _n str            = done str str-  check _n' (Done a str)   = return $ Done (return a) str-  check n'  (Cont k mErr)  = return $ Cont (takeR n' k) mErr+      where (str1, str2) = LL.splitAt n str+  step str = done str str+  check _ (Done a str)  = return $ Done (return a) str+  check n' (Cont k mErr) = return $ Cont (takeR n' k) mErr   done s1 s2 = liftM (flip Done s2) (runIter iter s1 >>= checkIfDone return) +{-# SPECIALIZE takeR :: Int -> IterateeG [] el IO a -> IterateeG [] el IO (IterateeG [] el IO a) #-}+{-# SPECIALIZE takeR :: Monad m => Int -> IterateeG [] el m a -> IterateeG [] el m (IterateeG [] el m a) #-} + -- |Map the stream: yet another iteratee transformer -- Given the stream of elements of the type el and the function el->el', -- build a nested stream of elements of the type el' and apply the@@ -517,11 +516,11 @@ mapStream :: (SC.StreamChunk s el, SC.StreamChunk s el', Monad m) =>  (el -> el')   -> EnumeratorN s el s el' m a-mapStream f i = IterateeG ((check <=< runIter i) . strMap (SC.cMap f))+mapStream f i = step i   where-    go iter = IterateeG ((check <=< runIter iter) . strMap (SC.cMap f))+    step iter = IterateeG ((check <=< runIter iter) . strMap (SC.cMap f))     check (Done a _)    = return $ Done (return a) (Chunk LL.empty)-    check (Cont k mErr) = return $ Cont (go k) mErr+    check (Cont k mErr) = return $ Cont (step k) mErr  -- |Map a stream without changing the element type.  For StreamChunks -- with limited element types (e.g. bytestrings)@@ -529,11 +528,11 @@ rigidMapStream :: (SC.StreamChunk s el, Monad m) =>   (el -> el)   -> EnumeratorN s el s el m a-rigidMapStream f i =  go i+rigidMapStream f i = step i   where-    go iter = IterateeG ((check <=< runIter iter) . strMap (LL.rigidMap f))+    step iter = IterateeG ((check <=< runIter iter) . strMap (LL.rigidMap f))     check (Done a _)    = return $ Done (return a) (Chunk LL.empty)-    check (Cont k mErr) = return $ Cont (go k) mErr+    check (Cont k mErr) = return $ Cont (step k) mErr  -- |Yet another stream mapping function.  For container instances with -- class contexts, such as uvector or storablevector, this allows@@ -545,11 +544,11 @@     Monad m) =>   (el -> el')   -> EnumeratorN s el s el' m a-looseMapStream f i =  go i+looseMapStream f i = step i   where-    go iter = IterateeG ((check <=< runIter iter) . strMap (looseMap f))+    step iter = IterateeG ((check <=< runIter iter) . strMap (looseMap f))     check (Done a _)    = return $ Done (return a) (Chunk LL.empty)-    check (Cont k mErr) = return $ Cont (go k) mErr+    check (Cont x mErr) = return $ Cont (step x) mErr   -- |Convert one stream into another, not necessarily in `lockstep'
src/Data/Iteratee/WrappedByteString.hs view
@@ -90,6 +90,12 @@   toList        = BC.unpack . unWrap   rigidMap f    = WrapBS . BC.map f . unWrap +instance LL.StringLike (WrappedByteString Char) where+  toString = BC.unpack . unWrap+  fromString = WrapBS . BC.pack+  lines      = LL.fromList . map WrapBS . BC.lines . unWrap+  words      = LL.fromList . map WrapBS . BC.words . unWrap+ instance SC.StreamChunk WrappedByteString Char where   cMap          = bcmap