我希望能够在编写get解析器组合器时使用State Monad中的State Monad和put函数。
这是如何做到的呢?我可以使用这个库来创建状态解析器吗?
发布于 2013-08-13 23:23:48
Sjoerd的注释是正确的;uu中的基本解析描述符类型是P st a,st是维护输入/解析状态的类型,a是输出类型。这是在Text.ParserCombinators.UU.Core中定义的。
UU.Core中的一些基本组合器对st可以是什么设置了一些约束,即它必须具有Eof、StoresErrors和HasPosition类的实例,这些类也是在UU.Core中定义的。其他实例可能是完整功能所必需的。
Text.ParserCombinators.UU.BasicInstances包为所有这些提供了适当的实例,这些实例允许在包含Char并提供错误和位置状态的ListLike类流上创建解析器。
如果您想要在Char的ListLike容器上使用位置和错误状态进行解析,例如,基于某种令牌类型进行解析,或者存储任意用户提供的状态,则必须创建一个类似于Text.ParserCombinators.UU.BasicInstances的模块,在该模块中提供符合您的需要的实例以及解析库的需要。
对于您的请求,我认为您需要用实现Str a s loc接口所需的字段来扩展st数据类型(用于P st a中的st类型),然后为MonadState (P <your new type> a)提供一个使用增强的Str类型提供get和set的实例(除了已经在UU.BasicInstances中的实例)。UU.Core已经为P st a提供了Monad实例,所以如果将MonadState实例约束为特定的状态类型,那么这应该不会太困难。
https://stackoverflow.com/questions/18218948
复制相似问题