Haskell 乔姆斯基层次结构中类型类和语法级别之间的对应关系

Haskell 乔姆斯基层次结构中类型类和语法级别之间的对应关系,haskell,grammar,monads,typeclass,applicative,Haskell,Grammar,Monads,Typeclass,Applicative,我的问题一方面是关于Applicative和Monad类型的类,另一方面是关于Chomsky层次结构的上下文无关和上下文敏感的语法级别 我听说类型类和语法级别之间有对应关系。这封信有多准确 也就是说,所有上下文无关语法是否都可以使用比应用组合词更强的语法进行解析,所有语法是否都可以使用比应用组合词更强的语法进行上下文无关解析?换句话说,Applicative类型类是否完全对应于上下文无关语法 同样的问题,除了“上下文无关”被“上下文敏感”替换,而Applicative被Monad替换 赏金澄清

我的问题一方面是关于Applicative和Monad类型的类,另一方面是关于Chomsky层次结构的上下文无关和上下文敏感的语法级别

我听说类型类和语法级别之间有对应关系。这封信有多准确

也就是说,所有上下文无关语法是否都可以使用比应用组合词更强的语法进行解析,所有语法是否都可以使用比应用组合词更强的语法进行上下文无关解析?换句话说,Applicative类型类是否完全对应于上下文无关语法

同样的问题,除了“上下文无关”被“上下文敏感”替换,而Applicative被Monad替换


赏金澄清:类型类是否对应于语法级别?例如 是否有一组类型类提供了表达式正则语言所需的所有操作,仅此而已


这个问题的动机是我正在研究一个解析器,并希望根据我使用的组合器来确定我的实现处于哪个语法级别。这可能吗

我认为还没有人正式展示过这一点。原因是applicative和monad都无法单独解析大部分内容。相反,你还需要

  • 选择(MonadPlus,可选)
  • 递归

  • 也就是说,使用(非确定性)选择和(任意)递归,应用程序解析器基本上完全匹配BNF接口(因此可以解析所有CFL),而Monad可以提供任意上下文敏感操作。

    我认为您的前提是不完整的<代码>应用程序本身不会让您走得很远,因为您既不能回溯,也不能根据输入选择产品。典型的parser combinator API依赖于
    Alternative
    以及
    Applicative
    @C.A.McCann是的,这是事实,感谢您指出这一点。
    Alternative
    是否对应于常规语法?我想添加这一点,但不确定如何处理
    Applicative
    约束。是否有其他类型类对应于常规语法?我不确定。实际上,我并不认为这里的联系比
    Monad
    表达
    Applicative
    无法表达的因果关系的一般能力更深,因为我看不出任何形式的自然限制(即,不是为此目的而设计的)语法分析器组合器的使用将导致只能定义表达能力较差的语法。进一步考虑,如果我们假设“拒绝一切”原语可用,我也不清楚一元语法分析器组合器是否仅限于上下文无关的语言,因为它可以在决定是否在任何点回溯之前进行任意计算。您可能应该阅读以下内容: