引数が複数個の場合のポイントフリースタイル

複数個の引数をポイントフリースタイルで省略すると、.がひとつずつ増えていきます。こんな感じ。

module Main (main) where

e n1       = n1
f n1       = n1
g n1 n2    = n1 + n2
h n1 n2 n3 = n1 + n2 + n3

hoge1 n1 = e $ f n1
hoge1'   = e . f                 -- ポイントフリー(引数がひとつの場合)

hoge2 n1 n2 = e $ g n1 n2
hoge2'      = (e .) . g          -- ポイントフリー(引数がふたつの場合)

hoge3 n1 n2 n3 = e $ h n1 n2 n3
hoge3'         = ((e .) .) . h   -- ポイントフリー(引数がみっつの場合)

main :: IO ()
main = do
  print $ hoge1  1               -- => 1
  print $ hoge1' 1               -- => 1
  print $ hoge2  1 2             -- => 3
  print $ hoge2' 1 2             -- => 3
  print $ hoge3  1 2 3           -- => 6
  print $ hoge3' 1 2 3           -- => 6