忽略Control.Applicative中的参数

时间:2013-04-17 03:02:45

标签: haskell applicative

我正在编写一个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

1 个答案:

答案 0 :(得分:9)

啊哈,建议的链接Applicative style parser for constructor with two arguments让我得到答案:使用(<$),不要使用(*>)

parser = f <$ a1 <* a2 <* a3 <*> a4 <* a5 <*> a6 <* a7 <* a8