Pozwala zobaczyć fragment kodu:Nie można obliczyć minimalną długość parsera - uu-parsinglib w Haskell
pSegmentBegin p i = pIndentExact i *> ((:) <$> p i <*> ((pEOL *> pSegment p i) <|> pure []))
jeśli zmienię ten kod w moim parsera do:
pSegmentBegin p i = do
pIndentExact i
((:) <$> p i <*> ((pEOL *> pSegment p i) <|> pure []))
mam błąd:
canot compute minmal length of a parser due to occurrence of a moadic bind, use addLength to override
Pomyślałem, że powyższy parser powinien zachowywać się w ten sam sposób. Dlaczego ten błąd może wystąpić?
EDIT
Powyższy przykład jest bardzo proste (uproszczenie pytanie) i jak wskazano poniżej niej nie jest konieczne stosowanie zrobić notacji tutaj, ale prawdziwy przypadek chciałem go użyć jest następująco:
pSegmentBegin p i = do
j <- pIndentAtLast i
(:) <$> p j <*> ((pEOL *> pSegments p j) <|> pure [])
zauważyłem, że dodanie „addLength 1” przed zrobić oświadczenie rozwiązuje problem, ale jestem pewien, jeśli jego poprawne rozwiązanie:
pSegmentBegin p i = addLength 2 $ do
j <- pIndentAtLast i
(:) <$> p j <*> ((pEOL *> pSegments p j) <|> pure [])
Dziękuję! Bardzo dużo wyjaśnia. Myślę, że w moim przypadku muszę użyć kombinatora parsera stylu monadycznego ('pSegmentBegin' zużywa spacje, policz nowy poziom wcięcia, a następnie wymusza wszystkie linie poniżej, aby użyć tego wcięcia), więc nie jest możliwe zapisanie go w" czystej aplikacji " "style –
Zgodnie z twoim pytaniem o' StackOverflow' - nie wiem, czy jest jakakolwiek subskrypcja pytań dostępna - jeśli nie korzystałem z niej do tej pory, ale myślę, że zamieszczanie tutaj pytań jest bardzo dobrym pomysłem - kiedy szukałem cokolwiek na temat 'uu-parsinglib' - jedyne znalezione wyniki znajdowały się na' StackOverflow' i dodatkowo wielu programistów go uderzyło - jest o wiele bardziej dostępny niż jakakolwiek lista mailingowa. –
Witam @Doaitse! Możesz otrzymywać powiadomienia e-mail o wszystkich przyszłych pytaniach SO, które zawierają tag [tag: uu-parsinglib], umieszczając wskaźnik myszy nad tagiem i klikając "Subskrybuj". Zmienię twoje pytanie, by wyczyścić nieistotne punkty i wyostrzyć cios :) Wszystko co najlepsze. – ulidtko