Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

CatsでFizzBuzzする

以下の記事を参考にCatsでも頑張ってみたけど、途中までしかできなかった・・・。

itchyny.hatenablog.com

import cats._
import cats.implicits._
import cats.data._

implicit val F = Monoid[Option[String]]
implicit val Al = Alternative[Option]

val f = (d: Int) => (s: String) => (n: Int) => Al.guard(n % d == 0) as s
val fizzbuzz = (n: Int) => ((f(3)("fizz") |+| f(5)("buzz"))(n) getOrElse n.toString)

println((1 to 30).map(fizzbuzz))
  • Applicative ((->) a)をCatsでどう書くかがわからなかった。
  • 中置記法がないのでfをこれ以上かっこよく出来ない

Monoidの|+|でがっちゃんこするのはできたのでまあ満足かもしれない。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?