2012-10-02 7 views
7

Gibt es eine Möglichkeit, die Anwendungsmöglichkeiten von <$> und <*> gut aussehen zu lassen, wenn es um Infix-Operatoren geht? Ich denke, dassAnwendungsstil für Infix-Operatoren?

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

viel mehr überladen sieht dann

a ++ b ++ c 

so frage ich mich, ob es eine schönere Art und Weise ist.

+3

Wenn sie alle der gleiche Operator sind, könnten Sie 'foldr1 (liftA2 (++)) [a, b, c]' verwenden. –

Antwort

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

oder

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

yup - fügen Sie ein weiteres Paar Winkelklammern hinzu. – AndrewC

6

Siehe Thomas Davie InfixApplicative Paket, das einen allgemeinen syntaktischen Trick liefert, anstatt einen neuen Betreiber für jede Hebe zu definieren.

+2

Die Dokumentation ist ein wenig verstümmelt. Ich * denke * das Beispiel des OP würde übersetzen als 'a <^(++)^> (b <^(++)^> c)' --- können Sie bestätigen/verweigern? – dave4420

+0

Sieht gut aus für mich. – Conal

3

SHE können Sie

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

schreiben, wenn, dass jede Nutzung ist. Natürlich gibt es einen gewissen Mehraufwand beim Einführen einer Vorverarbeitungsschicht.