UTNianos

Versión completa: Consulta composición de funciones y "$"
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas gente, estaba haciendo un final de paradigmas y ante la aburrición me puse a pelotudear con Haskell. El tema es el siguiente

Yo hago

head ( filter ((==2).snd) [(1,5),(1,2)] )

Eso funca y me tira (1,2)

Ahora, digo, mejor me ahorro unos paréntesis y compongo head con filter

head . filter ((==2).snd) [(1,5),(1,2)]

Pero eso no funca, lo que para mi no tiene sentido ya que la definicion de (.) es
(.) f g = (\x -> f ( g x) )

Además el intérprete me tira el error en
(filter ((==2).snd)) [(1,5),(1,2)]

Pero si le tiro eso solo de consulta me tira el resultado correcto, por ende el head tendria que funcionar...

Entonces me puse a chusmear y encontré la funcion $ cuya definicion es:
$ f x = f x

Si hago

head . filter ((==2).snd) $ [(1,5),(1,2)]

Mágicamente funciona, y no entiendo por qué

Help? =(

pd: no se qué onda pero no me aparece en el editor para ponerle la etiqueta de código haskell
el problema es que te faltaron parentesis =)
Probá:


(head . filter ((==2).snd)) [(1,5),(1,2)]

Arrelocooouououououou me compliqué todo por unos paréntesis =P gracias!
URLs de referencia