2012-10-02 11 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

yup - 山かっこの別のペアを追加します。 – AndrewC

6

ではなく、各リフティングのための新しい演算子を定義するよりも、一般的な構文のトリックを、提供トーマス・デイビーのInfixApplicativeパッケージを参照してください。

+2

ドキュメントは少しばらまきがあります。私は* OPの例が 'a <^(++)^>(b <^(++)^> c)'と解釈すると思います---あなたは確認/拒否できますか? – dave4420

+0

私に見えます。 – Conal

3

SHEはそれがすべての使用だ場合は、

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

を書き込むことができます。もちろん、前処理レイヤーの導入には若干のオーバーヘッドがあります。

関連する問題