Многие из множителей Parsec, которые я использую, имеют тип, например:
foo :: CharParser st Foo
CharParser
определяется здесь как:
type CharParser st = GenParser Char st
CharParser
является, таким образом, синонимом типа GenParser
, который сам определяет здесь как:
type GenParser tok st = Parsec [tok] st
GenParser
является другим синонимом типа, назначенным с помощью Parsec
, определяемым здесь как:
type Parsec s u = ParsecT s u Identity
So Parsec
- это частичное приложение ParsecT
, которое перечисляет здесь с типом:
data ParsecT s u m a
вместе со словами:
"ParsecT s u m a - синтаксический анализатор с типом потока s, тип пользовательского типа u, основной монады m и типа возврата a."
Какова основная монада? В частности, что я использую парсеры CharParser
? Я не вижу, где он вставлен в стек. Есть ли связь с использованием монады списка в Monadic Parsing в Haskell, чтобы вернуть несколько успешных парсов из двусмысленного парсера?