隣り合う二項の差をArrowを交えて

takkan_mのNo planな日常 - 隣り合う二項の差 どう書く?orgを書いた後、計算したい2値のタプルのリストをつくって回したいと思っていたら、nobsunさんのSコンビネーターでの実装におぉっと思ったので、似たようなのをArrowを使って書いた。

import Control.Arrow
f = ( tail &&& id ) >>> (uncurry zip )
diff xs  = map (uncurry  (-)) $ f xs

うーん。xsがどうしても消せなかった。

YだとかSだとか、コンビネーターって全然知らないんだよなぁ。

追記:歯磨きしていてうかんだ

diff2 = ( tail &&& id ) >>> (uncurry zip ) >>> ( map (uncurry (-)))

さらに追記:zipWith使えばよかった       

diff3 = ( tail &&& id ) >>> (uncurry $zipWith (-))