module Data.Bitstream.Fusion
( genericLength
, genericTake
, genericDrop
, genericIndex
, genericReplicate
, genericUnfoldrN
, genericFindIndex
, genericIndexed
)
where
import qualified Data.Bitstream.Fusion.Monadic as M
import Data.Vector.Fusion.Stream
import Data.Vector.Fusion.Util
import Prelude hiding (replicate)
import Prelude.Unicode
genericLength ∷ Num n ⇒ Stream α → n
genericLength = unId ∘ M.genericLength
genericTake ∷ Integral n ⇒ n → Stream α → Stream α
genericTake = M.genericTake
genericDrop ∷ Integral n ⇒ n → Stream α → Stream α
genericDrop = M.genericDrop
genericIndex ∷ (Integral n, Show n) ⇒ Stream α → n → α
genericIndex s = unId ∘ M.genericIndex s
genericReplicate ∷ Integral n ⇒ n → α → Stream α
genericReplicate = M.genericReplicate
genericUnfoldrN ∷ Integral n ⇒ n → (β → Maybe (α, β)) → β → Stream α
genericUnfoldrN = M.genericUnfoldrN
genericFindIndex ∷ Integral n ⇒ (α → Bool) → Stream α → Maybe n
genericFindIndex f = unId ∘ M.genericFindIndex f
genericIndexed ∷ Integral n ⇒ Stream α → Stream (n, α)
genericIndexed = M.genericIndexed