私は xml-conduit パーサーを書いていますが、モナディックよりも適用可能な構文を好みます。結合する引数がたくさんあるので、私は応用的にやや迷子になります。私の現在の問題には8つの引数が与えられています。結果を構築するために4番目と6番目のみを使用したいです。
私がそれを機能させる唯一の方法は次のとおりでした。ただし、フラットなソリューションには星の派手な配置が必要です。
import Control.Applicative
a1 :: Applicative Text
a2 :: Applicative Text
a3 :: Applicative Text
a4 :: Applicative Text
a5 :: Applicative Text
a6 :: Applicative Text
a7 :: Applicative Text
a8 :: Applicative Text
data Data = Data Text Text
f :: Text -> Text -> Data
parser :: Applicative Data
parser = a1 *> a2 *> a3 *> (f <$> a4 <* a5 <*> a6) <* a7 <* a8
括弧なしのフォームで同じことを行う方法はありますか?
parser = f <$> a1 ?? a2 ?? a3 ?? a4 ?? a5 ?? a6 ?? a7 ?? a8