stream-fusion-0.1: tests/Properties/Monomorphic/Stream.hs
--
-- raw stream interface, no list wrappers
--
-- These specify the versions used when fusion occurs.
--
-- So we can check our stream implementations, which are only used when
-- fusion happens, are correct.
--
module Properties.Monomorphic.Stream where
import Prelude
import qualified Prelude
import Properties.Utils
import qualified Data.Stream as Stream
import Data.Stream (Stream)
-- * Basic interface
cons :: A -> Stream A -> Stream A
snoc :: Stream A -> A -> Stream A
append :: Stream A -> Stream A -> Stream A
head :: Stream A -> A
last :: Stream A -> A
tail :: Stream A -> Stream A
init :: Stream A -> Stream A
null :: Stream A -> Bool
length :: Stream A -> Int
-- * List transformations
map :: (A -> B) -> Stream A -> Stream B
--reverse :: Stream A -> Stream A
intersperse :: A -> Stream A -> Stream A
--intercalate :: Stream A -> Stream (Stream A) -> Stream A
--transpose :: Stream (Stream A) -> Stream (Stream A)
-- * Reducing lists (folds)
foldl :: (B -> A -> B) -> B -> Stream A -> B
foldl' :: (B -> A -> B) -> B -> Stream A -> B
foldl1 :: (A -> A -> A) -> Stream A -> A
foldl1' :: (A -> A -> A) -> Stream A -> A
foldr :: (A -> B -> B) -> B -> Stream A -> B
foldr1 :: (A -> A -> A) -> Stream A -> A
-- ** Special folds
-- concat :: Stream (Stream A) -> Stream A
concatMap :: (A -> Stream B) -> Stream A -> Stream B
and :: Stream Bool -> Bool
or :: Stream Bool -> Bool
any :: (A -> Bool) -> Stream A -> Bool
all :: (A -> Bool) -> Stream A -> Bool
sum :: Stream N -> N
product :: Stream N -> N
maximum :: Stream OrdA -> OrdA
minimum :: Stream OrdA -> OrdA
-- * Building lists
-- ** Scans
scanl :: (A -> B -> A) -> A -> Stream B -> Stream A
scanl1 :: (A -> A -> A) -> Stream A -> Stream A
--scanr :: (A -> B -> B) -> B -> Stream A -> Stream B
--scanr1 :: (A -> A -> A) -> Stream A -> Stream A
-- ** Accumulating maps
--mapAccumL :: (C -> A -> (C, B)) -> C -> Stream A -> (C, Stream B)
--mapAccumR :: (C -> A -> (C, B)) -> C -> Stream A -> (C, Stream B)
-- ** Infinite lists
iterate :: (A -> A) -> A -> Stream A
repeat :: A -> Stream A
replicate :: Int -> A -> Stream A
cycle :: Stream A -> Stream A
-- ** Unfolding
unfoldr :: (B -> Maybe (A, B)) -> B -> Stream A
-- * Sublists
-- ** Extracting sublists
take :: Int -> Stream A -> Stream A
drop :: Int -> Stream A -> Stream A
splitAt :: Int -> Stream A -> ([A], [A])
takeWhile :: (A -> Bool) -> Stream A -> Stream A
dropWhile :: (A -> Bool) -> Stream A -> Stream A
--span :: (A -> Bool) -> Stream A -> (Stream A, Stream A)
--break :: (A -> Bool) -> Stream A -> (Stream A, Stream A)
--group :: Stream A -> Stream (Stream A)
--inits :: Stream A -> Stream (Stream A)
--tails :: Stream A -> Stream (Stream A)
-- * Predicates
isPrefixOf :: Stream A -> Stream A -> Bool
--isSuffixOf :: Stream A -> Stream A -> Bool
--isInfixOf :: Stream A -> Stream A -> Bool
-- * Searching lists
-- ** Searching by equality
elem :: A -> Stream A -> Bool
--notElem :: A -> Stream A -> Bool
lookup :: A -> Stream (A, B) -> Maybe B
-- ** Searching with A predicate
find :: (A -> Bool) -> Stream A -> Maybe A
filter :: (A -> Bool) -> Stream A -> Stream A
--partition :: (A -> Bool) -> Stream A -> (Stream A, Stream A)
-- * Indexing lists
(!!) :: Stream A -> Int -> A
elemIndex :: A -> Stream A -> Maybe Int
findIndex :: (A -> Bool) -> Stream A -> Maybe Int
elemIndices :: A -> Stream A -> Stream Int
findIndices :: (A -> Bool) -> Stream A -> Stream Int
-- * Zipping and unzipping lists
zip :: Stream A -> Stream B -> Stream (A, B)
zip3 :: Stream A -> Stream B -> Stream C -> Stream (A, B, C)
--zip4 :: Stream A -> Stream B -> Stream C -> Stream D -> Stream (A, B, C, D)
--zip5 :: Stream A -> Stream B -> Stream C -> Stream D -> Stream E -> Stream (A, B, C, D, E)
--zip6 :: Stream A -> Stream B -> Stream C -> Stream D -> Stream E -> Stream F -> Stream (A, B, C, D, E, F)
--zip7 :: Stream A -> Stream B -> Stream C -> Stream D -> Stream E -> Stream F -> Stream G -> Stream (A, B, C, D, E, F, G)
zipWith :: (A -> B -> C) -> Stream A -> Stream B -> Stream C
zipWith3 :: (A -> B -> C -> D) -> Stream A -> Stream B -> Stream C -> Stream D
--zipWith4 :: (A -> B -> C -> D -> E) -> Stream A -> Stream B -> Stream C -> Stream D -> Stream E
--zipWith5 :: (A -> B -> C -> D -> E -> F) -> Stream A -> Stream B -> Stream C -> Stream D -> Stream E -> Stream F
--zipWith6 :: (A -> B -> C -> D -> E -> F -> G) -> Stream A -> Stream B -> Stream C -> Stream D -> Stream E -> Stream F -> Stream G
--zipWith7 :: (A -> B -> C -> D -> E -> F -> G -> H) -> Stream A -> Stream B -> Stream C -> Stream D -> Stream E -> Stream F -> Stream G -> Stream H
unzip :: Stream (A, B) -> ([A], [B])
{-
--unzip3 :: Stream (A, B, C) -> (Stream A, Stream B, Stream C)
--unzip4 :: Stream (A, B, C, D) -> (Stream A, Stream B, Stream C, Stream D)
--unzip5 :: Stream (A, B, C, D, E) -> (Stream A, Stream B, Stream C, Stream D, Stream E)
--unzip6 :: Stream (A, B, C, D, E, F) -> (Stream A, Stream B, Stream C, Stream D, Stream E, Stream F)
--unzip7 :: Stream (A, B, C, D, E, F, G) -> (Stream A, Stream B, Stream C, Stream D, Stream E, Stream F, Stream G)
-}
-- * Special lists
-- ** Functions on strings
--lines :: Stream Char -> Stream [Char]
--words :: String -> Stream String
--unlines :: Stream String -> String
--unwords :: Stream String -> String
-- ** \"Set\" operations
--nub :: Stream A -> Stream A
--delete :: A -> Stream A -> Stream A
--(\\) :: Stream A -> Stream A -> Stream A
--union :: Stream A -> Stream A -> Stream A
--intersect :: Stream A -> Stream A -> Stream A
-- ** Ordered lists
--sort :: Stream OrdA -> Stream OrdA
--insert :: OrdA -> Stream OrdA -> Stream OrdA
-- * Generalized functions
-- ** The \"By\" operations
-- *** User-supplied equality (replacing an Eq context)
--nubBy :: (A -> A -> Bool) -> Stream A -> Stream A
--deleteBy :: (A -> A -> Bool) -> A -> Stream A -> Stream A
--deleteFirstsBy :: (A -> A -> Bool) -> Stream A -> Stream A -> Stream A
--unionBy :: (A -> A -> Bool) -> Stream A -> Stream A -> Stream A
--intersectBy :: (A -> A -> Bool) -> Stream A -> Stream A -> Stream A
--groupBy :: (A -> A -> Bool) -> Stream A -> Stream (Stream A)
-- *** User-supplied comparison (replacing an Ord context)
--sortBy :: (A -> A -> Ordering) -> Stream A -> Stream A
insertBy :: (A -> A -> Ordering) -> A -> Stream A -> Stream A
maximumBy :: (A -> A -> Ordering) -> Stream A -> A
minimumBy :: (A -> A -> Ordering) -> Stream A -> A
-- * The \"generic\" operations
genericLength :: Stream A -> I
genericTake :: I -> Stream A -> Stream A
genericDrop :: I -> Stream A -> Stream A
genericSplitAt :: I -> Stream A -> ([A], [A])
genericIndex :: Stream A -> I -> A
--genericReplicate :: I -> A -> Stream A
-- * Basic interface
cons = Stream.cons
snoc = Stream.snoc
append = Stream.append
head = Stream.head
last = Stream.last
tail = Stream.tail
init = Stream.init
null = Stream.null
length = Stream.length
-- * List transformations
map = Stream.map
--reverse = Stream.reverse
intersperse = Stream.intersperse
--intercalate = Stream.intercalate
--transpose = Stream.transpose
-- * Reducing lists (folds)
foldl = Stream.foldl
foldl' = Stream.foldl'
foldl1 = Stream.foldl1
foldl1' = Stream.foldl1'
foldr = Stream.foldr
foldr1 = Stream.foldr1
-- ** Special folds
-- concat = Stream.concat
concatMap = Stream.concatMap
and = Stream.and
or = Stream.or
any = Stream.any
all = Stream.all
sum = Stream.sum
product = Stream.product
maximum = Stream.maximum
minimum = Stream.minimum
-- * Building lists
-- ** Scans
scanl = \f z xs -> Stream.scanl f z (Stream.snoc xs bottom)
where
bottom :: a
bottom = error "bottom"
scanl1 = \f xs -> Stream.scanl1 f (Stream.snoc xs bottom)
where
bottom :: a
bottom = error "bottom"
{-
scanr = Stream.scanr
scanr1 = Stream.scanr1
-- ** Accumulating maps
mapAccumL = Stream.mapAccumL
mapAccumR = Stream.mapAccumR
-}
-- ** Infinite lists
iterate = Stream.iterate
repeat = Stream.repeat
replicate = Stream.replicate
cycle = Stream.cycle
-- ** Unfolding
unfoldr = Stream.unfoldr
-- * Sublists
-- ** Extracting sublists
take = Stream.take
drop = Stream.drop
splitAt = Stream.splitAt
takeWhile = Stream.takeWhile
dropWhile = Stream.dropWhile
{-
span = Stream.span
break = Stream.break
group = Stream.group
inits = Stream.inits
tails = Stream.tails
-}
-- * Predicates
isPrefixOf = Stream.isPrefixOf
{-
isSuffixOf = Stream.isSuffixOf
isInfixOf = Stream.isInfixOf
-}
-- * Searching lists
-- ** Searching by equality
elem = Stream.elem
--notElem = Stream.notElem
lookup = Stream.lookup
-- ** Searching with a predicate
find = Stream.find
filter = Stream.filter
--partition = Stream.partition
-- * Indexing lists
(!!) = Stream.index
findIndex = Stream.findIndex
elemIndex = Stream.elemIndex
elemIndices = Stream.elemIndices
findIndices = Stream.findIndices
-- * Zipping and unzipping lists
zip = Stream.zip
zip3 = Stream.zip3
--zip4 = Stream.zip4
--zip5 = Stream.zip5
--zip6 = Stream.zip6
--zip7 = Stream.zip7
zipWith = Stream.zipWith
zipWith3 = Stream.zipWith3
--zipWith4 = Stream.zipWith4
--zipWith5 = Stream.zipWith5
--zipWith6 = Stream.zipWith6
--zipWith7 = Stream.zipWith7
unzip = Stream.unzip
--unzip3 = Stream.unzip3
--unzip4 = Stream.unzip4
--unzip5 = Stream.unzip5
--unzip6 = Stream.unzip6
--unzip7 = Stream.unzip7
-- * Special lists
-- ** Functions on strings
{-
lines = Stream.lines
words = Stream.words
unlines = Stream.unlines
unwords = Stream.unwords
-- ** \"Set\" operations
nub = Stream.nub
delete = Stream.delete
(\\) = (Stream.\\)
union = Stream.union
intersect = Stream.intersect
-- ** Ordered lists
sort = Stream.sort
insert = Stream.insert
-- * Generalized functions
-- ** The \"By\" operations
-- *** User-supplied equality (replacing an Eq context)
nubBy = Stream.nubBy
deleteBy = Stream.deleteBy
deleteFirstsBy = Stream.deleteFirstsBy
unionBy = Stream.unionBy
intersectBy = Stream.intersectBy
groupBy = Stream.groupBy
-}
-- *** User-supplied comparison (replacing an Ord context)
insertBy = Stream.insertBy
{-
sortBy = Stream.sortBy
-}
maximumBy = Stream.maximumBy
minimumBy = Stream.minimumBy
-- * The \"generic\" operations
genericLength = Stream.genericLength
genericTake = Stream.genericTake
genericDrop = Stream.genericDrop
genericIndex = Stream.genericIndex
genericSplitAt = Stream.genericSplitAt
--genericReplicate = Stream.genericReplicate