Back to Fpinscala

07.Answer

answerkey/laziness/07.answer.md

latest420 B
Original Source
scala
def map[B](f: A => B): LazyList[B] =
  foldRight(empty[B])((a, acc) => cons(f(a), acc))

def filter(f: A => Boolean): LazyList[A] =
  foldRight(empty[A])((a, acc) => if f(a) then cons(a, acc) else acc)

def append[A2>:A](that: => LazyList[A2]): LazyList[A2] =
  foldRight(that)((a, acc) => cons(a, acc))

def flatMap[B](f: A => LazyList[B]): LazyList[B] =
  foldRight(empty[B])((a, acc) => f(a).append(acc))