Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 理解语法分析器monad_Haskell_Monads - Fatal编程技术网

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定义所困扰。看

特别是我很难理解
(>>=)
操作符的定义。 例如,在expresson
let 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