6

私は 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
4

1 に答える 1

9

ああ、提案されたリンクApplicative style parser for constructor with two argumentsは、私を答えに導きました: use (<$)、 do not use (*>)

parser = f <$ a1 <* a2 <* a3 <*> a4 <* a5 <*> a6 <* a7 <* a8
于 2013-04-17T03:11:15.637 に答える