2009-11-05 9 views
23

encontré la definición de la siguiente

(%) = flip fmap 

Puedo escribir código como el siguiente:

readFile "/etc/passwd" % lines % filter (not . null) 

para mí tiene más sentido entonces la alternativa

filter (not . null) <$> lines <$> readFile "/etc/passwd" 

Obviamente, solo es cuestión de orden, ¿alguien más hace esto? ¿Hay alguna razón válida para no escribir código como este?

+5

El nombre más común para esto es probablemente '' '<&>' '' después de '' '(&) = flip ($)' '' por lente. – fread2281

Respuesta

5

Hay una función similar para la clase de tipo Applicative llamada <**>; es una cosa perfectamente razonable de querer o usar también para Functor. Desafortunadamente, la semántica es un poco diferente para <**>, por lo que no se puede ampliar directamente para aplicarlo también a Functor.

4
-- (.) is to (<$>) as flip (.) is to your (%). 

lo general define (&) = flip (.) Y es igual que tu ejemplo, se puede aplicar la composición de funciones backwords. Permite, en mi opinión, entender código sin puntos más fácil.

+5

También está el combinador de flechas (>>>) que es lo mismo que (voltear (.)) Para las funciones – Will

+0

¡Por qué gracias señor! Aparte del texto estándar de importación, esto será útil para que pueda mantener el código estándar. – codebliss

+1

Tenga en cuenta que el objetivo define '' '(&) = flip ($)' '' – fread2281

3

Personalmente, no utilizaría tales operadores porque entonces tengo que aprender dos órdenes para leer programas.

+1

No estoy seguro de que encuentre este argumento suficientemente convincente, pero es un punto de vista interesante, por lo que +1. Por curiosidad: ¿prefieres '= <<' over '>> =' por la misma razón? – Stephan202

+1

¡Ciertamente! – copumpkin

+1

Nunca entendí la declaración anterior. Parece tener sentido usar notación estándar porque entonces es como la tubería de Unix? – codebliss

Cuestiones relacionadas