2013-04-17 12 views
6

Sto scrivendo un parser xml-conduit e preferisco la sintassi applicativa a monadic. Con un sacco di argomenti da combinare, mi sento un po 'perso in applicativo però. Il mio problema corrente è dato 8 argomenti, voglio solo usare il 4 e il 6 per costruire il risultato.Ignorare gli argomenti in Control.Applicativo

L'unico modo per farlo funzionare era il seguente; ci dovrebbe essere disposizione di fantasia di stelle per una soluzione piatta però:

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 

Un modo per fare lo stesso in forma senza parentesi?

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

Si potrebbe voler controllare [parentesi idioma] (https://personal.cis.strath.ac.uk/conor.mcbride/pub/she/idiom.html), che è un po 'bello di zucchero sintassi per usare gli applicativi in ​​questo modo. Sfortunatamente, richiede l'uso di un preprocessore, ma è comunque molto interessante. –

+0

@TikhonJelvis Grazie, sembra interessante. –

risposta

Problemi correlati