module Data.RangeMin.Fusion.Stream where
import qualified Data.RangeMin.Fusion.Stream.Monadic as SM
import Data.Vector.Fusion.Util
type Stream = SM.Stream Id
type MStream = SM.Stream
length :: Stream a -> Int
length = SM.length
liftStream :: Monad m => Stream a -> SM.Stream m a
liftStream (SM.Stream suc s0 n) = SM.Stream (\ i a -> return (unId (suc i a))) s0 n
imap :: (Int -> a -> b) -> Stream a -> Stream b
imap = SM.imap
map :: (a -> b) -> Stream a -> Stream b
map = SM.map
replicate :: Int -> a -> Stream a
replicate = SM.replicate
enumN :: Int -> Stream Int
enumN = SM.enumN
enumNR :: Int -> Stream Int
enumNR = SM.enumNR
generate :: Int -> (Int -> a) -> Stream a
generate = SM.generate
iunfoldN :: Int -> (Int -> b -> Maybe (a, b)) -> b -> Stream a
iunfoldN = SM.iunfoldN
unfoldN :: Int -> (b -> Maybe (a, b)) -> b -> Stream a
unfoldN = SM.unfoldN
imapM :: Monad m => (Int -> a -> m b) -> Stream a -> SM.Stream m b
imapM f = SM.imapM f . liftStream
mapM :: Monad m => (a -> m b) -> Stream a -> SM.Stream m b
mapM = imapM . const
imapM_ :: Monad m => (Int -> a -> m b) -> Stream a -> m ()
imapM_ f = SM.imapM_ f . liftStream
mapM_ :: Monad m => (a -> m b) -> Stream a -> m ()
mapM_ = imapM_ . const
snoc :: Stream a -> a -> Stream a
snoc = SM.snoc
izipWith :: (Int -> a -> b -> c) -> Stream a -> Stream b -> Stream c
izipWith = SM.izipWith
zipWith :: (a -> b -> c) -> Stream a -> Stream b -> Stream c
zipWith = SM.zipWith
imapAccumL :: (b -> Int -> a -> (c, b)) -> b -> Stream a -> Stream c
imapAccumL = SM.imapAccumL
mapAccumL :: (b -> a -> (c, b)) -> b -> Stream a -> Stream c
mapAccumL = SM.mapAccumL
iterateN :: Int -> a -> (a -> a) -> Stream a
iterateN = SM.iterateN
ipostscanl :: (b -> Int -> a -> b) -> b -> Stream a -> Stream b
ipostscanl = SM.ipostscanl
postscanl :: (b -> a -> b) -> b -> Stream a -> Stream b
postscanl = SM.postscanl
ifoldl :: (b -> Int -> a -> b) -> b -> Stream a -> b
ifoldl f z s = unId (SM.ifoldl f z s)
foldl :: (b -> a -> b) -> b -> Stream a -> b
foldl f z s = unId (SM.foldl f z s)
unbox :: Stream (Box a) -> Stream a
unbox = SM.unbox
fromListN :: Int -> [a] -> Stream a
fromListN = SM.fromListN