2012-10-02 92 views
7

有沒有一種方法,使的<$><*>與綴運營商打交道時好看應用性用途?我認爲中綴操作符的適用風格?

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

看起來更凌亂然後

a ++ b ++ c 

所以我不知道是否有更好的方式。

+3

如果他們都是一樣的操作,您可以使用'foldr1(liftA2(++))[A,B,C]'。 –

回答

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

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

是 - 添加另一對尖括號。 – AndrewC

6

參見Thomas戴維的InfixApplicative包,它提供了一般的句法特技,而不必限定新的操作者爲每個提升。

+2

該文檔有點損壞。我認爲* *在OP的例子翻譯爲'一個<^(++)^>(B <^(++)^> C)' - 你可以確認/拒絕? – dave4420

+0

看起來很對我。 – Conal

3

SHE讓你寫

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

如果這是任何使用。當然,引入預處理層還有一些開銷。