我正在编写一个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
答案 0 :(得分:9)
啊哈,建议的链接Applicative style parser for constructor with two arguments让我得到答案:使用(<$)
,不要使用(*>)
。
parser = f <$ a1 <* a2 <* a3 <*> a4 <* a5 <*> a6 <* a7 <* a8