gpt4 book ai didi

在 case block 内解析

转载 作者:行者123 更新时间:2023-12-02 02:06:14 27 4
gpt4 key购买 nike

所以我正在编写自己的解析器,该解析器几乎已经完成,但是我仍然卡在函数的返回上。我的返回是一个 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” )。通常我只会“解压”它,但是,我该如何在案例中执行此操作?

感谢您的帮助

最佳答案

Normally I would just 'unpack' it, however, how would I do this within a case ?

您需要首先将最终的return“插入”case 分支内

pattern <- match "pos:" `mplus`  ....
case pattern of
"pos" -> return (Tile parsePosition fix wiel)
"fixed" -> return (Tile pos parseFixed wiel)
"wheel" -> return (Tile pos fix parseWiel)

现在,让分支在解析器 monad 中运行,您可以像平常一样解压:

pattern <- match "pos:" `mplus`  ....
case pattern of
"pos" -> do -- alternative 1
pp <- parsePosition
return (Tile pp fix wiel)
"fixed" -> -- alternative 2
(\pf -> Tile pos pf wiel) <$> parseFixed
"wheel" -> ...

关于在 case block 内解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57289927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com