2013-04-17 18 views
6

Tôi đang viết một trình phân tích cú pháp xml-conduit và tôi thích cú pháp ứng dụng đơn thuần hơn. Với rất nhiều đối số để kết hợp, tôi nhận được phần nào bị mất trong ứng dụng mặc dù. Vấn đề hiện tại của tôi được đưa ra 8 đối số, tôi chỉ muốn sử dụng thứ 4 và thứ 6 để xây dựng kết quả.Bỏ qua các đối số trong Control.Applicative

Cách duy nhất tôi có thể làm cho nó hoạt động như sau; nên có sự sắp xếp ưa thích của các ngôi sao cho một giải pháp phẳng mặc dù:

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 

Bất kỳ cách nào để làm tương tự trong biểu mẫu mà không có dấu ngoặc đơn?

parser = f <$> a1 ?? a2 ?? a3 ?? a4 ?? a5 ?? a6 ?? a7 ?? a8 
+2

Bạn có thể muốn xem [dấu ngoặc đơn] (https://personal.cis.strath.ac.uk/conor.mcbride/pub/she/idiom.html), đây là một số đường cú pháp đẹp để sử dụng các ứng dụng theo cách này. Thật không may, nó đòi hỏi phải sử dụng một bộ tiền xử lý, nhưng nó vẫn rất mát mẻ. –

+0

@TikhonJelvis Cảm ơn, có vẻ thú vị. –

Trả lời