2012-10-02 17 views
7

¿Hay alguna manera de hacer que los usos aplicativos de <$> y <*> se vean bien cuando se trata con operadores de infijo? Creo que¿Estilo aplicable para operadores de infijo?

((++) <$> a <*> ((++) <$> b <*> c)) 

se ve mucho más desordenado entonces

a ++ b ++ c 

así que me pregunto si hay una manera más agradable.

+3

Si son todos el mismo operador, puede usar 'foldr1 (liftA2 (++)) [a, b, c]'. –

Respuesta

11
(<++>) = liftA2 (++) 
a <++> b <++> c 

o

liftA2 (++) a $ liftA2 (++) b c 
+2

yup - agregue otro par de corchetes angulares. – AndrewC

6

InfixApplicative paquete de ver a Thomas Davie, que proporciona un truco sintáctica general, en lugar de tener que definir un nuevo operador para cada elevación.

+2

La documentación está un poco destrozada. Creo * que el ejemplo del PO se traduciría como 'a <^(++)^> (b <^(++)^> c) '--- ¿puedes confirmar/denegar? – dave4420

+0

me parece correcto. – Conal

3

SHE le permite escribir

(|a ++ (|b ++ c|)|) 

si eso es cualquier uso. Por supuesto, hay algo de sobrecarga para introducir una capa de preprocesamiento.

Cuestiones relacionadas