2013-04-17 10 views
6

Piszę parser xml-conduit, a ja preferuję składnię aplikacyjną do monadycznej. Mając wiele argumentów, które można łączyć, trochę się gubię w aplikowaniu. Mój obecny problem został podany 8 argumentów, chcę tylko użyć czwartego i szóstego, aby skonstruować wynik.Ignorowanie argumentów w Control.Applicative

Jedyny sposób, w jaki mogłem go wykonać, był następujący; nie powinno być fantazyjny układ gwiazd na płaskiej rozwiązanie choć:

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 

jakikolwiek sposób zrobić to samo w formie bez nawiasów?

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

Możesz chcieć sprawdzić [wsporniki idiom] (https://personal.cis.strath.ac.uk/conor.mcbride/pub/she/idiom.html), która jest jakiś ładny cukier składnia za korzystanie z aplikacji w ten sposób. Niestety wymaga to użycia preprocesora, ale nadal jest bardzo fajny. –

+0

@ TikhonJelvis Dzięki, wygląda interesująco. –

Odpowiedz

Powiązane problemy