его в библиотеке нет. Видимо, так не делают. И тогда возникает вопрос: а как делают?
делают, например, конкретный тип MyParser = Parsec MyError Text
Ну, собрать единую монаду так не получится, вроде
это уже готовая монада. с чем ещё вы хотите скрещивать парсер?
Со своим стейтом (храню режим, в котором сейчас находимся) и ридером (известные комманды для парсинга)
можете их положить внутрь, чтобы снаружи было ParsecT?
Да, но тогда это не будет смотреться как что-то единое А по смыслу, мне кажется, здесь именно так
Этот State — state моего парсера. Логично, вроде бы, чтоб он был прямо на верхнем уровне
почему логично? если вы построите башню ParsecT (StateT m), то при ошибке парсинга состояние сохранится, а если StateT (ParsecT m), то вроде ничего полезного
Если это о том, что от порядка запуска будет зависеть, так это вроде почти со всеми комбинациями трансформеров так.
и в данном случае ParsecT (StateT m) удобнее. разве нет?
Да, у меня так и есть при запуске. Внешний Parsec. Но думать об этом при паринге, вроде, ни к чему
тогда абстракция type ParserM = ParsecT (State s) не хуже, чем абстракция с классами. всё будет выглядеть так же, но dbg будет работать
Обсуждают сегодня