2012-10-02 15 views
7

Czy sposób radzenia sobie z aplikacjami <$> i <*> wygląda ładnie podczas pracy z operatorami infiksów? Myślę, żeStyl aplikacyjny dla operatorów infiksów?

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

wygląda o wiele bardziej zaśmiecone następnie

a ++ b ++ c 

więc zastanawiam się, czy jest ładniejszy sposób.

+3

Jeśli wszyscy są tymi samymi operatorami, możesz użyć 'foldr1 (liftA2 (++)) [a, b, c]'. –

Odpowiedz

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

lub

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

yup - dodaj kolejną parę nawiasów trójkątnych. – AndrewC

6

InfixApplicative pakiet patrz Thomas Davie, który zapewnia ogólną składniowej sztuczki, zamiast konieczności definiowania nowego operatora dla każdej liftingu.

+2

Dokumentacja jest nieco zmącona. Myślę, że * przykład OP będzie tłumaczony jako 'a <^(++)^> (b <^(++)^> c)' --- czy możesz potwierdzić/odmówić? – dave4420

+0

Wygląda dobrze dla mnie. – Conal

3

SHE pozwala pisać

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

jeśli to każde użycie. Oczywiście, istnieje pewne obciążenie związane z wprowadzeniem warstwy preprocessingu.

Powiązane problemy