2013-04-17 14 views
6

'da argümanları görmezden geliyorum Bir xml-conduit ayrıştırıcısı yazıyorum ve monadik için uygulama sözdizimini tercih ediyorum. Birleştirilecek pek çok argüman olsa da, uygulamada bir şekilde kaybolmuş olurum. Benim şimdiki problemim 8 argüman verildi, ben sadece sonucu oluşturmak için 4. ve 6. kullanın.Control.Applicative

Çalışmamı sağlamanın tek yolu şuydu;

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 

parantez olmadan formda aynı şeyi herhangi bir şekilde: gerçi düz çözüm yıldızlı fantezi düzenleme olmalıdır? (*>) kullanmayın, kullanmak (<$):

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

Bunu [deyim parantez] kontrol etmek isteyebilirsiniz (https://personal.cis.strath.ac.uk/conor.mcbride/pub/she/idiom.html), bazı güzel sözdizimi şeker olan Bu şekilde uygulamaları kullanmak için. Ne yazık ki, bir ön işlemcinin kullanılmasını gerektiriyor, ama yine de çok havalı. –

+0

@TikhonJelvis Teşekkürler, ilginç görünüyor. –

cevap