Molti dei combinatori Parsec che uso sono di tipo quali:Sottostante Parsec Monade
foo :: CharParser st Foo
CharParser
è definito here come:
type CharParser st = GenParser Char st
CharParser
è quindi un tipo sinonimi coinvolge GenParser
, si definito come:
type GenParser tok st = Parsec [tok] st
GenParser
è poi un altro tipo sinonimi, assegnato attraverso Parsec
, definita here come:
type Parsec s u = ParsecT s u Identity
Quindi Parsec
è un'applicazione parziale di , stesso elencato here con Tipo:
data ParsecT s u m a
insieme alle parole :
"ParsecT suma è un parser con st tipo risma, tipo stato utente u, sottostante monad m e tipo di ritorno a. "
Qual è la monade sottostante? In particolare, cosa succede quando uso i parser CharParser
? Non riesco a vedere dove è inserito nello stack. Esiste una relazione con l'uso della lista monad in Monadic Parsing in Haskell per restituire più risultati positivi da un parser ambiguo?
Grazie, ho modificato la mia domanda per includere questo passaggio. Quindi è la base del trasformatore monade. Credo che non abbia alcun rapporto con l'analisi ambigua descritta nel documento di Hutton/Meijer. Quindi l'uso della lista monad appare ovunque all'interno del parser di Parsec? Parsec è solo non ambiguo? Se è così, è codificato usando 'Maybe' o' Either'? – user2023370
La monade sottostante non viene utilizzata da parsec stesso, quindi non influisce sull'ambiguità. – augustss
Penso che quello che stavo cercando di chiedere fosse il rapporto tra la lista monade nel giornale Hutton/Meijer; e il [Consumato] (http://hackage.haskell.org/packages/archive/parsec/latest/doc/html/Text-Parsec-Prim.html#t:Consumed) e [Rispondi] (http: // hackage .haskell.org/packages/archive/parsec/latest/doc/html/Text-Parsec-Prim.html # t: Reply) tipi utilizzati in Parsec. – user2023370