Arrowデビュー
Arrowを使ってパスカルの三角形を作ってみた。これは全然Arrowっぽくないんだけど、ちょっとだけ分かった、気がする。
{- ArrowPascalTriangle.hs :set -farrows nisikawa 2007.04.02 -} import Control.Arrow import Data.List (mapAccumL) newtype PS a b = PS {runPS :: a -> b} instance Arrow PS where arr f = PS f PS f >>> PS g = PS $ g . f first (PS f) = PS $ first f iterateA f = proc x -> f >>> (arr id &&& iterateA f) >>> arr (uncurry (:)) -< x ps = arr $ uncurry (\x y -> y ++ [x]) . mapAccumL (\x y -> (y, x + y)) 0 pascalTriangle :: [[Integer]] pascalTriangle = runPS (iterateA ps) [1]