2013-04-17 7 views
6

Ich schreibe einen xml-Conduit-Parser, und ich bevorzuge applikative Syntax zu monadischen. Mit vielen Argumenten zu kombinieren, bin ich etwas verloren in der Anwendung. Mein aktuelles Problem ist 8 Argumente gegeben, ich möchte nur die 4. und 6. verwenden, um das Ergebnis zu konstruieren.Ignorieren von Argumenten in Control.Applicative

Der einzige Weg, wie ich es zum Laufen bringen konnte, war das Folgende;

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 

Jede Art und Weise gleich in der Form ohne Klammern zu tun: Es sollte jedoch für eine flache Lösung Phantasie Anordnung der Sterne sein?

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

Vielleicht möchten Sie [Idiom Klammern] überprüfen (https://personal.cis.strath.ac.uk/conor.mcbride/pub/she/idiom.html), die Zucker einige nette Syntax um Anwendungen auf diese Weise zu verwenden. Leider erfordert es einen Präprozessor, aber es ist immer noch sehr cool. –

+0

@TichonJelvis Danke, sieht interessant aus. –

Antwort