Skip to content

Instantly share code, notes, and snippets.

@jmccance
Last active November 22, 2016 17:57
Show Gist options
  • Save jmccance/6365824ba63e52e1ea90c02386146fdc to your computer and use it in GitHub Desktop.
Save jmccance/6365824ba63e52e1ea90c02386146fdc to your computer and use it in GitHub Desktop.
Monoidal Fizzbuzz in Scala
import scalaz._
import scalaz.Scalaz._
import scala.language.higherKinds
object Fizzbuzz extends App {
def nums = Stream.from(1).map(_.toString)
def every[A: Monoid](n: Int)(a: A): Stream[A] =
Stream.fill(n - 1)(Monoid[A].zero) ++ a #:: every(n)(a)
def fizzes = every(3)(Option("fizz"))
def buzzes = every(5)(Option("buzz"))
def pattern = fizzes.fzipWith(buzzes)(_ |+| _)
def fizzbuzzes = pattern.fzipWith(nums)(_.getOrElse(_))
fizzbuzzes.take(150).foreach(println)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment