関数の合成


> 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