Después de jugar un poco con Haskell un poco tropecé con esta función:¿El sistema de tipos de Haskell trata un valor numérico como función?
Prelude Data.Maclaurin> :t ((+) . ($) . (+))
((+) . ($) . (+)) :: (Num a) => a -> (a -> a) -> a -> a
(Data.Maclaurin se exporta por el paquete de espacio vectorial.) Por lo tanto se necesita un Num, una función, y en última instancia otra Num retornos a Num. ¿Qué magia hace que el siguiente trabajo?
Prelude Data.Maclaurin> ((+) . ($) . (+)) 1 2 3
6
2 obviamente no es una función (a-> a) o me perdí de algo?
http://www.haskell.org/haskellwiki/Num_instance_for_functions – sdcvvc