scalaz.StreamW.scala Maven / Gradle / Ivy
The newest version!
package scalaz
sealed trait StreamW[A] extends PimpedType[Stream[A]] {
import Scalaz._
def ʐ: ZipStream[A] = zip(value)
def merge(s: Stream[A]): Stream[A] =
if (value.isEmpty) s
else value.head #:: s.merge(value.tail)
def toZipper: Option[Zipper[A]] = value match {
case Stream.Empty => None
case h #:: t => Some(zipper(Stream.Empty, h, t))
}
def zipperEnd: Option[Zipper[A]] = value match {
case Stream.Empty => None
case _ => {
val x = value.reverse
Some(zipper(x.tail, x.head, Stream.Empty))
}
}
def heads: Stream[Stream[A]] = value match {
case h #:: t => Stream(h) #:: t.heads.map(h #:: _)
case _ => Stream.Empty
}
def tails: Stream[Stream[A]] = value match {
case h #:: t => value #:: (t: StreamW[A]).tails
case _ => Stream.Empty
}
def zapp[B, C](fs: ZipStream[A => B => C]): ZipStream[B => C] = (value ʐ) <*> fs
def unfoldForest[B](f: A => (B, () => Stream[A])): Stream[Tree[B]] = value.map(_.unfoldTree(f))
def unfoldForestM[B, M[_]: Monad](f: A => M[(B, Stream[A])]): M[Stream[Tree[B]]] =
value ↦ ((_: A).unfoldTreeM(f))
}
trait Streams {
implicit def StreamTo[A](as: Stream[A]): StreamW[A] = new StreamW[A] {
val value = as
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy