【发布时间】:2019-12-08 22:10:36
【问题描述】:
所以我正在编写自己的解析器,它几乎完成了,但是我一直被函数的返回所困。我的回报是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类型;
tile的构造函数是Coord Bool Bool。
这当然行不通,因为 parsePosition 返回 Parser Coord 并且它需要 Coord(没有 "parse")。通常我只会“解包”它,但是,我将如何在一个案例中做到这一点?
感谢帮助
【问题讨论】:
标签: parsing haskell functional-programming monads do-notation