Haskellはやっぱりカッコいい

Preludeのreverseを見てそう思った。

reverse :: [a] -> [a]
reverse = foldl (flip (:)) [] 

この簡潔さとおしゃれさはやばい。やっぱりヤバい。だって世界(リアル・ワールド)は再帰でできてるんですよ。発散しちゃってるけどね。
下のが以前、僕が書いたreverse関数。考え方はあってるんだろうけど、foldlだのflipだのはさくっとでてこない。

rev [] = []
rev (x:[]) = [x]
rev (x:xs) = rev (xs) ++ [x]

(追記)

foldl            :: (a -> b -> a) -> a -> [b] -> a
foldl f z []      = z
foldl f z (x:xs)  = foldl f (f z x) xs

flip           :: (a -> b -> c) -> b -> a -> c
flip f x y      = f y x

foldr            :: (a -> b -> b) -> b -> [a] -> b
foldr f z []      = z
foldr f z (x:xs)  = f x (foldr f z xs)

こういうのがさっと出てくると本当カッコいいよなぁ...。