ポイントフリー

一つの値を名前に束縛せずに複数箇所で使うってどうやるんだ。Sコンビネータ的なものが用意されてる?

cube = (((*).((*)<*>id))<*>id) -- \x -> x * x * x
fib = (flip(if'.(< 2))1)<*>((+).fib.(-1 +)<*>fib.(-2 +))
http://d.hatena.ne.jp/nishiohirokazu/20100520/1274364170

言われてみれば cube とか fib って Sコンビネータにぴったりのいい例題だ。
というわけで自分もやってみた。
上記の cube は、(x * x) * x としているが、以下は x * (x * x) としたバージョン
上記の fib は、if x<2 then 1 ...としているが、以下は if x<2 then x ...としたバージョン

import Control.Applicative
cube = (*) <*> ((*) <*> id)
if' b x y = if b then x else y
fib = if'.(<2) <*> id <*> ((+).fib.(-1 +) <*> fib.(-2 +))