El ejercicio plantea este foldr:
raro ps = foldr (.) id (map filter ps)
y pide ver a qué evalúa raro [const True, (<2), (>3)] [1,2,3,4]
La respuesta correcta es [] y es medio intuitivo pero nos trancamos tratando de analizarlo aplicando las definiciones de foldr, map y filter.
filter :: (a -> Bool) -> [a] -> [a]
map :: (a -> b) -> [a] -> [b]
foldr :: (a -> b -> b) -> b -> [a] -> [b]
Aplicando lo que se pide, raro [const True, (<2), (>3)] [1,2,3,4] = foldr (.) id (map filter [const True, (<2), (>3)]) [1,2,3,4]
Aqui como seria la aplicacion? Porque map espera una funcion y una lista, seria filter la funcion y [const True, (<2), (>3)] la lista? De todas formas luego no sabemos como seguir...
Gracias!