関数合成

func1::Int -> Int
func1 x = x + 1
func2::Int -> Int -> Int
func2 x y = x * y
func3::Int -> Int -> Int
func3 x y = (func1 . func2 x) y

func3 = x * y + 1にしようとしたのだが、思いつくまでにだいぶ時間がかかってしまった。

(func1 . func2) x y

のようにはできない。なぜならfunc2は2引数の関数だから。
http://www.haskell.org/onlinereport/standard-prelude.html#$v.の関数合成の項目の

(.) :: (b -> c) -> (a -> b) -> a -> c

f.gとするとき、fの引数とgの返り値は型があってないといけない。
よって2引数をとるfunc2は1引数のfunc1と合成できず、1引数をとる「func2 x」とfunc1の合成というかたちにしないといけない。

サンプルが少ないので試行錯誤中。