【发布时间】:2011-11-08 16:56:16
【问题描述】:
我使用的许多 Parsec 组合器属于以下类型:
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 定义为:
type Parsec s u = ParsecT s u Identity
所以Parsec 是ParsecT 的部分应用,它本身列出了here 类型:
data ParsecT s u m a
连同这些词:
"ParsecT s u m a 是一个流类型为 s,用户状态类型为 u 的解析器, 底层 monad m 和返回类型 a。"
什么是底层的monad?特别是,当我使用 CharParser 解析器时会发生什么?我看不到它在堆栈中的插入位置。是否与使用 Monadic Parsing in Haskell 中的 list monad 从不明确的解析器返回多个成功的解析有关?
【问题讨论】:
标签: parsing haskell monads monad-transformers