如何在uu parsinglib Haskell parser combinator中维护状态

如何在uu parsinglib Haskell parser combinator中维护状态,parsing,haskell,state,monads,uu-parsinglib,Parsing,Haskell,State,Monads,Uu Parsinglib,我希望在编写uu parsinglib解析器组合器时,能够使用State Monad中的get和put函数 如何做到这一点?我可以用这个库创建状态解析器吗?sjoard的评论是正确的;uu parsinglib中的基本解析描述符类型是pst a,其中st是维护输入/解析状态的类型,a是输出类型。这在Text.ParserCombinators.UU.Core中定义 UU.Core中的一些基本组合符对st的定义提出了一些限制,即它必须具有UU.Core中定义的Eof、storerror和HasPo

我希望在编写
uu parsinglib
解析器组合器时,能够使用
State Monad
中的
get
put
函数


如何做到这一点?我可以用这个库创建状态解析器吗?

sjoard的评论是正确的;uu parsinglib中的基本解析描述符类型是
pst a
,其中st是维护输入/解析状态的类型,a是输出类型。这在Text.ParserCombinators.UU.Core中定义

UU.Core中的一些基本组合符对st的定义提出了一些限制,即它必须具有UU.Core中定义的
Eof
storerror
HasPosition
类的实例。完整功能可能需要其他实例

Text.ParserCombinators.UU.BasicInstances包为所有这些类提供适当的实例,允许在包含Char并提供错误和位置状态的ListLike类流上创建解析器

如果您希望在除具有位置和错误状态的类似列表的Char容器之外的其他容器上进行解析器,例如基于某个令牌类型进行解析或存储任意用户提供的状态,您必须创建一个类似于Text.ParserCombinators.UU.BasicInstances的模块,在该模块中,您可以提供自己的实例,以满足您的需求以及解析库的需求


根据您的请求,我认为您需要使用必要的字段来扩展
Str a s loc
数据类型(用于
p st a
中的
st
类型),以实现MonadState接口,然后为
MonadState(p a)提供一个实例(除了UU.BasicInstances中已有的实例之外)
使用扩展的Str类型提供
get
set
。UU.Core已经为
pst a
提供了Monad实例,因此如果您将MonadState实例约束到特定的状态类型,这应该不会太困难。

我认为如果您想这样做,您必须为整个Text.ParserCombinators.UU.BasicInstances.Hello编写自己的替换文件!自从你回答我的问题已经有一段时间了,但之后我完成了这项任务,现在我又回到了它。我在为
MonadState(pa)
创建实例时遇到了问题,因为我不知道如何实现
get
很简单:
get=tid pState
where
tid::MyStr a s loc->Int
。你知道我们如何实现set吗?