許多秒差距組合子我使用的是一種類型的,例如:標的秒差距單子
foo :: CharParser st Foo
CharParser
定義here爲:
type CharParser st = GenParser Char st
CharParser
因此涉及GenParser
類型同義詞,本身定義爲here爲:
type GenParser tok st = Parsec [tok] st
GenParser
然後另一種類型的同義詞,使用Parsec
分配,定義here爲:用的話沿着
data ParsecT s u m a
:
type Parsec s u = ParsecT s u Identity
所以Parsec
是的局部應用,本身帶有類型列出here :
「ParsecT suma是一個解析器與ST令牌類型s,用戶狀態類型u, 基本monad m和返回類型a「。
什麼是底層monad?特別是,當我使用CharParser
解析器時,它是什麼?我看不到它被插入堆棧中的位置。與Monadic Parsing in Haskell中的列表monad的使用是否有關係,以從模糊解析器返回多個成功的分析?
謝謝,我編輯了我的問題,包括該步驟。所以它是monad變壓器的基礎。我認爲這與Hutton/Meijer論文中描述的模糊解析沒有關係。那麼列表monad的使用是否出現在Parsec分析器的任何地方? Parsec只是非含糊嗎?如果是這樣,是用'Maybe'還是'Either'編碼的? – user2023370
底層monad不被parsec自身使用,因此不會影響歧義。 – augustss
我想我想問的是Hutton/Meijer論文中單子monad之間的關係;和[消費](http://hackage.haskell.org/packages/archive/parsec/latest/doc/html/Text-Parsec-Prim.html#t:Consumed)和[回覆](http:// hackage .haskell.org/packages/archive/parsec/latest/doc/html/Text-Parsec-Prim.html#t:Reply)類型。 – user2023370