参考記事
前回
前回の最後の代わり
fb = proc x -> do e <- arr (uncurry (++)) <<< r "Fizz".(==0).(`mod`3) &&& r "Buzz".(==0).(`mod`5) -< x arr (uncurry (++)) <<< (arr (uncurry r) <<< show *** (=="")) &&& snd -< (x, e)
こっちの独自路線でいこう。
(arr (uncurry r) <<< show *** (==""))
の部分は、
Fizz
Buzz
FizzBuzz
でなかったら数値を show
したものを吐くんだね。
仕上げ
fb = proc x -> do arr (uncurry (++)) <<< (arr (uncurry r) <<< show *** (=="")) &&& snd <<< id &&& (arr (uncurry (++)) <<< r "Fizz".(==0).(`mod`3) &&& r "Buzz".(==0).(`mod`5)) -< x
参考記事のほうはおそらく、カッコを減らすために、関数合成で区切りを入れているのだと思う。
proc
を消して、
fb = arr (uncurry (++)) <<< (arr (uncurry r) <<< show *** (=="")) &&& snd <<< id &&& (arr (uncurry (++)) <<< r "Fizz".(==0).(`mod`3) &&& r "Buzz".(==0).(`mod`5))
最後に arr (uncurry (op))
を演算子化して完成だ。
infixr 2 <+< (<+<) op f = arr (uncurry op) <<< f fb = (++) <+< (r <+< show *** (=="")) &&& snd <<< id &&& ((++) <+< r "Fizz".(==0).(`mod`3) &&& r "Buzz".(==0).(`mod`5))
いやー、これはすごいね。暗号みたいでかっこいい。