Concurrent Clean : ポイントフリー & SKI

はじめまして、ポイントフリーゲームをしてみました。
問題は、[id:n314:20061022:1161504834]から借用。

f0 a b = h (g a b)

まず、関数合成演算子を用意。(StdFuncモジュールに定義されているもの)

(o) infixr  9
(o) f g :== \ x -> f (g x)

これを使って、

f1 a = h o g a // ((o) h) (g a)
f2 = ((o) h) o g

さらに、SKIコンビネータを用意。

i a :== a
k a b :== a
s f g x :== f x (g x)

で、関数合成演算子をSKIで書き直し。

//p f g a = f (g a)
//        = (k f) a (g a)
//        = s (k f) g a
p f :== s (k f)

でもって、(o)をpで置き換えて、

f3 a = p h (g a)
f4 = p (p h) g

さらに、SKIで置き換え。

f5 = s (k (p h)) g
f6 = s (k (s (k h))) g
      • -

ところで、

p :== s o k

ということは、

p :== p s k

ということ?