ポイントフリー

Twitterから転載

ラムダ使わずにプログラム書くの難しい。一つの値を名前に束縛せずに複数箇所で使うってどうやるんだ。Sコンビネータ的なものが用意されてる?

Control.ApplicativeにSコンビネータあった
→Control.Applicativeの<*>がSコンビネータだと書いている人がいるがぜんぜん違うように見える。
→Control.Applicativeの<*>がSコンビネータであることは挙動で確認したが、本来なんのためのものなのかとか、なんでこれでSコンビネータになるのかとかがわからない
haskell-ja > Archives > 2009/11/02

square = (*)<*>id -- \x -> x * x
cube = (((*).((*)<*>id))<*>id) -- \x -> x * x * x
import Control.Applicative

if' True  x _ = x
if' False _ y = y

fib = (flip(if'.(< 2))1)<*>((+).fib.(-1 +)<*>fib.(-2 +))
main = print $ take 10 $ map fib [1..]