練習問題 1.4.7

カリー化された関数をカリー化されてない版に変換する関数 uncurry を定義せよ. すべての
x
および
y
に対して以下が成り立つことを示せ.


curry (uncurry f) x y = f x y
uncurry (curry f) (x,y) = f (x,y)

curry
および
uncurry
の定義


curry        ::  ((a,b) -> c) -> (a -> b -> c)
curry f x y  =   f (x,y)

uncurry          ::  (a -> b -> c) -> ((a,b) -> c)
uncurry f (x,y)  =   f x y
curry (uncurry f) x y = f x y
の証明


    curry (uncurry f) x y
=   { curry の定義 }
    (uncurry f) (x,y)
=   { 関数適用は左結合 }
    uncurry f (x,y)
=   { uncurry の定義 }
    f x y
uncurry (curry f) (x,y) = f (x,y)
の証明


    uncurry (curry f) (x,y)
=   { uncurry の定義 }
    (curry f) x y
=   { 関数適用は左結合 }
    curry f x y
=   { curry の定義 }
    f (x,y)