там даже я понял, что если возможны несколько путей парсинга, то надо возвращать список вариантов а потом аппликативно его парсить дальше, неправильные варианты сами по пути заглохнут, и что останется (1, 0 или много вариантов) - это и есть результат парсинга.