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 +2/−0
- Setup.hs +2/−0
- iteratee.cabal +11/−4
- src/Data/Iteratee/Base.hs +34/−35
- src/Data/Iteratee/WrappedByteString.hs +6/−0
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