以下の記事を参考にCatsでも頑張ってみたけど、途中までしかできなかった・・・。
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の|+|
でがっちゃんこするのはできたのでまあ満足かもしれない。