Arrow

filterA

できた!けどめちゃくちゃだ。その場しのぎ的な感じがぷんぷんするぜー。 filterA p = arr listcase >>> arr (const []) ||| ((?x -> if p x then Left x else Right ()) *** filterA p >>> arr (uncurry cons)) cons (Left x) l = x:l cons (Right _) l = l…

mapA

Arrow での map 関数。 mapA f = arr listcase >>> arr (const []) ||| (f *** mapA f >>> arr (uncurry (:))) んぐ。気持ち悪い。常識が覆されております。map がでてきたら当然 filter も書くでしょ!とかいって適当に書いてたけど、いっこうにうまくいく…