> let ab a = a+10000
> :t ab
ab :: (Num a) => a -> a
> let cd c = c+2000000
> :t cd
cd :: (Num a) => a -> a
ab の結果をcdの引数とする。
> cd (ab 1)
2010001
cd (ab 1) の構文糖衣。
> cd $ ab 1
2010001
cd と ab の関数を合成し、引数に1を渡す。
> (cd . ab) 1
2010001
ccd の関数は引数をふたつ取る。
> let ccd c d = c+d+2000000
> :t ccd
ccd :: (Num a) => a -> a -> a
ab の結果をcd の二つめの引数とする。
> ccd 100 (ab 1)
2010101
ccd 100 (ab 1) の構文糖衣。
> ccd 100 $ ab 1
2010101
($)を使って中置きでなく書いてみる。
> :t ($)
($) :: (a -> b) -> a -> b
> ($) (ccd 100) (ab 1)
2010101
ccd に引数ひとつを渡すともうひとつの引数をとる関数を返す。その関数と ab を合成し、出来た関数に引数 1 を渡す。
> (ccd 100 . ab) 1
2010101
(.)を使って中置きでなく書いてみる。
> :t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
> (.) (ccd 100) ab 1
2010101