curry, uncurry
Prelude> :t curry curry :: ((a, b) -> c) -> a -> b -> c Prelude> :t uncurry uncurry :: (a -> b -> c) -> (a, b) -> c Prelude> add (a, b) = a + b Prelude> curry add 2 3 5 Prelude> mul a b = a * b Prelude> uncurry mul (2, 3) 6
curry
はタプルから引数へ展開uncurry
は引数をタプルにまとめる
というようなイメージなのかな。
zip
した各要素には uncurry
が使えそう。
Prelude> xs = map (uncurry (+)) $ zip [1..] [2..] Prelude> take 10 xs [3,5,7,9,11,13,15,17,19,21]