Haskell 理解语法分析器monad
我目前正在研究Haskell 理解语法分析器monad,haskell,monads,Haskell,Monads,我目前正在研究attoparsec库的源代码,现在我被解析器的monad定义所困扰。看 特别是我很难理解(>>=)操作符的定义。 例如,在expressonlet such't'中!pos'more'a=runParser(ka)t'pos'more'lose-such:参数pos'和t'来自哪里 也许我现在太糊涂了,看不到明显的东西,所以如果有人能解释一下解析器类型的monad定义,帮助我更好地理解它,我将不胜感激 提前谢谢 这是定义一个函数such': succ' :: Success i
attoparsec
库的源代码,现在我被解析器的monad定义所困扰。看
特别是我很难理解(>>=)
操作符的定义。
例如,在expressonlet such't'中!pos'more'a=runParser(ka)t'pos'more'lose-such
:参数pos'
和t'
来自哪里
也许我现在太糊涂了,看不到明显的东西,所以如果有人能解释一下解析器
类型的monad定义,帮助我更好地理解它,我将不胜感激
提前谢谢 这是定义一个函数such'
:
succ' :: Success i (State i) a r
succ' t' !pos' more' a = runParser (k a) t' pos' more' lose succ
-- type Success i t a r = t -> Pos -> More -> a -> IResult i r
-- t' :: t
-- pos' :: Pos
-- more' :: More
-- a :: a
-- runParser (k a) t' pos' more' lose succ :: IResult i r
没什么特别的,只是一个局部函数定义。然后将此函数作为其最后一个参数传递给runParser
。非常感谢!我是如此盲目,我现在看到了
succ' :: Success i (State i) a r
succ' t' !pos' more' a = runParser (k a) t' pos' more' lose succ
-- type Success i t a r = t -> Pos -> More -> a -> IResult i r
-- t' :: t
-- pos' :: Pos
-- more' :: More
-- a :: a
-- runParser (k a) t' pos' more' lose succ :: IResult i r