6

我正在编写一个 xml-conduit 解析器,我更喜欢应用语法而不是 monadic。虽然有很多论据要结合,但我在应用中有些迷失了。我当前的问题是 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 让我得到了答案:使用(<$),不要使用(*>)

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