Ω =(λa.a a) λa.a a

Y = λf.(λa.f (a a)) λa.f (a a)

join x = x >>= id
fmap f m = liftM f m = m >>= return.f
a >>= f = join (fmap f a)
f >=> g = \x -> f x >>= g

ap mf mx = mf >>= \f -> mx >>= \x -> return (f x)
ghc -c -ddump-simpl -dsuppress-coercions -dsuppress-uniques
Declaraciones newtype en Haskell
La Transformación de Haskell Curry y la Aplicación Parcial
JavaScript::¿Podrías hacerlo sin if?
Polimorfismo Parametrico de Rango Superior en Haskell