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
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. –
@TikhonJelvis Grazie, sembra interessante. –