Hola,
Estuviste cerca de resolver bien la expresión. Lo que pasa es que tenés mal la parentización en la expresión
filter ( (const True) (.) ( filter (>3) (.) id ) ) ) [1, 2, 3, 4].
El resultado de
foldr (.) id [filter (const True), filter (<2), filter (>3)] [1, 2, 3, 4]
es una cadena de composiciones aplicado a [1, 2, 3, 4].
Estuviste cerca de resolver bien la expresión. Lo que pasa es que tenés mal la parentización en la expresión
filter ( (const True) (.) ( filter (>3) (.) id ) ) ) [1, 2, 3, 4].
El resultado de
foldr (.) id [filter (const True), filter (<2), filter (>3)] [1, 2, 3, 4]
es una cadena de composiciones aplicado a [1, 2, 3, 4].
Fijate que:
foldr (.) id [filter (const True), filter (<2), filter (>3)]
= filter (const True) . foldr (.) id [filter (<2), filter (>3)]
= filter (const True) . filter (<2) . foldr (.) id [filter (>3)]
= filter (const True) . filter (<2) . filter (>3) . foldr (.) id []
= filter (const True) . filter (<2) . filter (>3) . id
La expresión final es entonces:
filter (const True) . filter (<2) . filter (>3) . id $ [1,2,3,4]
O sea, la lista pasa a través de la cadena de filters.
Saludos,
Alberto.