2013-04-17 147 views
6

我正在編寫一個xml-管道解析器,我更喜歡適用於monadic的語法。儘管有很多論點需要結合,但我在應用方面有些失落。我目前的問題有8個參數,我只想用第四和第六個來構造結果。忽略Control.Applicative中的參數

我能做到的唯一方法是:但應該有一個平面解決方案的明星花式排列雖然:

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 
+2

你可能想看看[成語括號](https://personal.cis.strath.ac.uk/conor.mcbride/pub/she/idiom.html),這是一些漂亮的語法糖以這種方式使用應用程序。不幸的是,它需要使用預處理器,但它仍然非常酷。 –

+0

@TikhonJelvis謝謝,看起來很有趣。 –

回答