packages feed

enumerator 0.4.12 → 0.4.13

raw patch · 4 files changed

+66/−33 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

enumerator.cabal view
@@ -1,5 +1,5 @@ name: enumerator-version: 0.4.12+version: 0.4.13 synopsis: Reliable, high-performance processing with left-fold enumerators license: MIT license-file: license.txt
hs/Data/Enumerator.hs view
@@ -345,29 +345,30 @@            => Iteratee a m b            -> (Exc.SomeException -> Iteratee a m b)            -> Iteratee a m b-catchError i h = continue (wrap i) where-	wrap iter EOF = Iteratee $ do-		res <- run iter+catchError i h = go i where+	go iter = Iteratee $ do+		step <- runIteratee iter+		case step of+			Yield _ _ -> return step+			Error err -> runIteratee (h err)+			Continue k -> return (Continue (wrap k))+	+	wrap k EOF = Iteratee $ do+		res <- run (k EOF) 		case res of 			Left err -> runIteratee (enumEOF $$ h err) 			Right b -> return (Yield b EOF) 	-	wrap iter stream = Iteratee $ do-		step <- runIteratee iter+	wrap k stream = Iteratee $ do+		step <- runIteratee (k stream) 		case step of-			Yield b as -> return (Yield b (mappend as stream))+			Yield _ _ -> return step 			Error err -> do 				step' <- runIteratee (h err) 				case step' of-					Yield b _ -> return (Yield b stream)-					Error err' -> return (Error err')-					Continue k -> runIteratee (k stream)-			Continue k -> do-				step' <- runIteratee (k stream)-				case step' of-					Yield b as -> return (Yield b as)-					Error err -> runIteratee (h err)-					Continue k' -> return (Continue (wrap (continue k')))+					Continue k' -> runIteratee (k' stream)+					_ -> return step+			Continue k' -> return (Continue (wrap k'))   infixl 1 >>==
src/primitives.anansi view
@@ -111,27 +111,28 @@            => Iteratee a m b            -> (Exc.SomeException -> Iteratee a m b)            -> Iteratee a m b-catchError i h = continue (wrap i) where-	wrap iter EOF = Iteratee $ do-		res <- run iter+catchError i h = go i where+	go iter = Iteratee $ do+		step <- runIteratee iter+		case step of+			Yield _ _ -> return step+			Error err -> runIteratee (h err)+			Continue k -> return (Continue (wrap k))+	+	wrap k EOF = Iteratee $ do+		res <- run (k EOF) 		case res of 			Left err -> runIteratee (enumEOF $$ h err) 			Right b -> return (Yield b EOF) 	-	wrap iter stream = Iteratee $ do-		step <- runIteratee iter+	wrap k stream = Iteratee $ do+		step <- runIteratee (k stream) 		case step of-			Yield b as -> return (Yield b (mappend as stream))+			Yield _ _ -> return step 			Error err -> do 				step' <- runIteratee (h err) 				case step' of-					Yield b _ -> return (Yield b stream)-					Error err' -> return (Error err')-					Continue k -> runIteratee (k stream)-			Continue k -> do-				step' <- runIteratee (k stream)-				case step' of-					Yield b as -> return (Yield b as)-					Error err -> runIteratee (h err)-					Continue k' -> return (Continue (wrap (continue k')))+					Continue k' -> runIteratee (k' stream)+					_ -> return step+			Continue k' -> return (Continue (wrap k')) :
tests/Properties.hs view
@@ -3,7 +3,9 @@ -- See license.txt for details module Main (tests, main) where +import           Control.Concurrent import qualified Control.Exception as Exc+import           Control.Monad.IO.Class (liftIO) import           Data.Bits ((.&.)) import           Data.Char (chr) import qualified Data.List as L@@ -13,7 +15,7 @@ import           Data.String (IsString, fromString) import           Data.Word (Word8) -import           Data.Enumerator (($$))+import           Data.Enumerator (($$), (>>==)) import qualified Data.Enumerator as E import qualified Data.Enumerator.Binary as EB import qualified Data.Enumerator.Text as ET@@ -27,6 +29,7 @@ import qualified Data.Text.Encoding as TE  import           Test.QuickCheck hiding ((.&.))+import           Test.QuickCheck.Property (morallyDubiousIOProperty) import           Test.QuickCheck.Poly (A, B, C) import qualified Test.Framework as F import           Test.Framework.Providers.QuickCheck2 (testProperty)@@ -673,7 +676,9 @@ test_Other = F.testGroup "Other" 	[ test_Sequence 	, test_joinE+	, test_CatchError_WithoutContinue 	, test_CatchError_NotDivergent+	, test_CatchError_Interleaved 	]  test_Sequence :: F.Test@@ -694,8 +699,17 @@ 		 		iter = (E.joinE (E.enumList 1 xs) (EL.map (* 10))) $$ EL.consume +test_CatchError_WithoutContinue :: F.Test+test_CatchError_WithoutContinue = testProperty "catchError/without-continue" test where+	test = case runIdentity (E.run (E.enumList 1 [] $$ iter)) of+		Left err -> Exc.fromException err == Just (Exc.ErrorCall "require: Unexpected EOF")+		Right _ -> False+	iter = E.catchError+		(E.throwError (Exc.ErrorCall "error"))+		(\_ -> EL.require 1)+ test_CatchError_NotDivergent :: F.Test-test_CatchError_NotDivergent = testProperty "catchError not divergent" test where+test_CatchError_NotDivergent = testProperty "catchError/not-divergent" test where 	test = case runIdentity (E.run (E.enumList 1 [] $$ iter)) of 		Left err -> Exc.fromException err == Just (Exc.ErrorCall "require: Unexpected EOF") 		Right _ -> False@@ -704,6 +718,23 @@ 			EL.head 			E.throwError (Exc.ErrorCall "error")) 		(\_ -> EL.require 1)++test_CatchError_Interleaved :: F.Test+test_CatchError_Interleaved = testProperty "catchError/interleaved" prop where+	prop = within 1000000 (morallyDubiousIOProperty io)+	io = do+		mvar <- newEmptyMVar+		E.run_ (enumMVar mvar $$ E.catchError (iter mvar) onError)+	enumMVar mvar = loop where+		loop (E.Continue k) = do+			x <- liftIO (takeMVar mvar)+			k (E.Chunks [x]) >>== loop+		loop step = E.returnI step+	iter mvar = do+		liftIO (putMVar mvar ())+		EL.head+		return True+	onError err = return False  -- misc