すごいFizzBuzzがあったので紹介します。
let (m ~> str) x = str <$ guard (x `mod` m == 0) in map (fromMaybe . show <*> 3 ~> "fizz" <> 5 ~> "buzz")
何が何だかさっぱりですね!
これだけの機能を使っています。
1行目
・ ~>
内のMaybe
オルタナティブ(モノイド+アプリカティブ)でguard
・ ~>
内のMaybe
ファンクターで(<$)
2行目
・ 関数モノイド
・ Maybe
モノイド
・ [](String)
モノイド
・ 関数アプリカティブの<*>
また、依存型のFizzBuzzもあるみたいです。
.
.
一方Egisonはパターンマッチを使った。
fizzbuzz' = matchLambda as mod(15) | 0 -> "FizzBuzz" | (3 or 6 or 9 or 12) -> "Fizz" | (5 or 10) -> "Buzz" | $x -> x
.
.