prop_zip xs i1 i2 n = n > 0 ==>
  runner1 (enumPureNChunk xs n $ liftM2 (,) (Iter.zip i1 i2) stream2list)
  == let (r1, t1) = runner1 $ enumPure1Chunk xs $ liftM2 (,) i1 stream2list
         (r2, t2) = runner1 $ enumPure1Chunk xs $ liftM2 (,) i2 stream2list
         shorter = if P.length t1 > P.length t2 then t2 else t1
     in ((r1,r2), shorter)
 where types = (i1 :: I, i2 :: I, xs :: [Int])

-- ---------------------------------------------
-- Sequences
prop_zip xs i1 i2 n = n > 0 ==>
  runner1 (enumPureNChunk xs n $ liftM2 (,) (Iter.zip i1 i2) stream2list)
  == let (r1, t1) = runner1 $ enumPure1Chunk xs $ liftM2 (,) i1 stream2list
         (r2, t2) = runner1 $ enumPure1Chunk xs $ liftM2 (,) i2 stream2list
         shorter = if P.length t1 > P.length t2 then t2 else t1
     in ((r1,r2), shorter)
 where types = (i1 :: I, i2 :: I, xs :: [Int])

-- ---------------------------------------------
-- Sequences
prop_zip xs i1 i2 n = n > 0 ==>
  runner1 (enumPureNChunk xs n $ liftM2 (,) (Iter.zip i1 i2) stream2list)
  == let (r1, t1) = runner1 $ enumPure1Chunk xs $ liftM2 (,) i1 stream2list
         (r2, t2) = runner1 $ enumPure1Chunk xs $ liftM2 (,) i2 stream2list
         shorter = if P.length t1 > P.length t2 then t2 else t1
     in ((r1,r2), shorter)
 where types = (i1 :: I, i2 :: I, xs :: [Int])

-- ---------------------------------------------
-- Sequences