Я хотел бы написать парсерный парсер, который будет анализировать последовательность чисел, возвращая отсортированный список, но не получив встречного дубликата (ошибка должна указывать на позицию дубликата) , Для отсортированных частей я могу просто использовать:Как вызвать ошибку во время анализатора manyAccum
manySorted = manyAccum insert
Но как я могу вызвать ошибку парсек, если номер уже есть в списке. Это не похоже на то, что manyAccum позволяет это, и я не мог понять, как сделать свой собственный клон manyAccum, который (реализация использует unParser, который, похоже, не отображается вне библиотеки Parsec).
Вы уверены, что это работа для парсера? Обычно этот тип поведения идет в другой части процесса. –
Попробуйте сначала разобрать все цифры, а затем проверить все необходимые условия. Таким образом, вы можете легко создать исключение или вернуть «Left», например. – Mark
Вот что я делаю сейчас, но было бы неплохо получить местоположение дубликата в сообщении об ошибке. Я предполагаю, что парсер чисел может получить местоположение из состояния парсера и вернуть его вместе с результатом, чтобы его можно было использовать позже для ошибки. Это правильный шаблон для использования в таком случае? – kruipen