Итак, я пишу свой собственный синтаксический анализатор, который почти готов, однако я продолжаю застревать с возвратом моей функции. Мой возврат - case
, но в case
мне нужно выполнить синтаксический анализ, который я не могу заставить работать.
parseCompontntsTile :: Tile -> Parser Tile
parseCompontntsTile (Tile pos fix wiel) =
do parseWhiteSpace
patern <- match "pos:" `mplus` match "fixed:" `mplus` match "wheel:"
return (case patern of
"pos" -> (Tile parsePosition fix wiel)
"fixed" -> (Tile pos parseFixed wiel)
"wheel" -> (Tile pos fix parseWiel) )
Функция parsePosition
относится к типу parsePosition :: Parser Coord
; конструктор плитки Coord Bool Bool
.
Это, конечно, не работает, потому что parsePosition
возвращает Parser Coord
и ожидает Coord
(без "parse"). Обычно я просто «распаковывал» его, но как мне это сделать в случае?
спасибо за помощь