非カリー化
どう書く?org - ピラミッドを作る
初めて uncurry が欲しくなる場面に会った。
こんな風にデータがtupleとして固着しているときには、データの方をバラすんではなく、関数の方を uncurry してしまう方がすっきりする。
pyramid :: Int -> String pyramid n = unlines $ map lineUp [1..n] where lineUp x = uncurry replicate =<< [(n-x, ' '), (2*x-1, '*')] main :: IO () main = do putStr "> " x <- getLine putStr $ pyramid (read x) main