generated at
Sコンビネータ
sharing combinator
S\equiv\lambda xyz.(xz)(yz)
z をシェアしている


Haskellでは、関数モナド ap <*>
通常の ap の型は、
ap :: Monad m => m (a -> b) -> m a -> m b
関数モナドの ap の型は、
m (->) r なので
ap :: (r -> a -> b) -> (r -> a) -> (r -> b)
これは、以下のようにSコンビネータを定義したものと同じ
hs
s :: (r -> a -> b) -> (r -> a) -> r -> b s x y z = x z (y z)