ひさしぶりにArrowLoopをつかってみた

ひさしぶりにArrowLoopをつかってみました。大分忘れていたな、という。いや覚えていたけど。

import Control.Arrow

lengthA xs = loop ((snd&&&fst>>>app)&&&lengthA') (xs,0)
  where
    lengthA' = snd>>>\f -> cond (null.fst)>>>snd ||| ((tail***(+)1)>>>f)                                       

cond f x = if f x then Left x else Right x

ファンクション倶楽部のニコ動をみてて、ArrowLoopがよく分からないみたいなコメントを目にしました。わかんないですよねー。でも、やりこんでみると結構なんとかなるもんです。