練習問題 1.6.1

以下の関数に適切な多相型を与えよ.

const x y = x
subst f g x = f x (g x)
apply f x = f x
flip f x y = f y x

import Prelude hiding (const,flip)

const :: a -> (b -> a)
const    x    y  =  x

subst :: (a -> b -> c) -> (a -> b) -> (a -> c)
subst    f                g            x =  f x (g x)

apply :: (a -> b) -> (a -> b)
apply    f           x  =  f x

flip :: (a -> b -> c) -> (b -> a -> c)
flip    f                 x    y =  f y x
N.B.
const
および
flip
Prelude
で定義されているので,これらを隠蔽するために
hiding
指定して
Prelude
をインポートする.