我使用的一些应用基础设施的分类模拟?

时间:2017-01-26 11:38:54

标签: haskell applicative category-theory

我一直在阅读关于Haskell Applicative仿函数的理论解释的类别:显然,它们可以在类别理论术语中解释为松散的封闭函子或松散的monoidal仿函数(取决于你问的是谁,{{3}这让我对以下内容感到疑惑。

不久前,我写了一篇论文(与Ilya Sergey和我们的顾问Frank Piessens和Dave Clarke一起),使用Applicative仿函数在DSL中使用“效果递归”的递归原语,主要用于解析器库。我们发现我们需要一些非常特殊的构造函数,看起来它们可能是通用的(某种程度上)。总而言之,我要问的是:下面的一些结构是否与类别理论有某种联系,如果是,如何?

请注意,我会为两个应用仿函数p ◦ qp的构成编写q

以下是我们在此过程中所需的基元列表:

  • afix:效果递归原语。  我们真的想要一个看起来像这样的递归原语:

    afix :: (p a → p a) → p a
    

    但是,对于我们需要的p更复杂的解释,这是无法实现的。相反,我们最终得到以下结论:

    afix :: (∀ q. Applicative q ⇒ p (q a) → p (q a)) → p a
    

    显然,在这个参数化量化的应用函子q中包装递归出现的值会在我们采用定点的函数中强制执行一种值效应分离。显然,这足以使我们更复杂的功能发挥作用。

  • 在实施中,我们需要一种看似如下的共同操作符:

    coapp0 :: (p a → p b) → p (a → b)
    

    然而,要求它作为p的一般运算符,似乎它会限制我们只使用琐碎的应用函数p。相反,我们注意到我们可以使用以下内容,这是可实现的:

    coapp :: Applicative p ⇒ (∀ q . Applicative q ⇒ (p ◦ q) a → (p ◦ q) b) → p (a → b)
    

总而言之:从类别理论的角度来看,以上是否有某种熟悉的东西?具体来说,对类型∀ q . Applicative q ⇒ (p ◦ q) a → (p ◦ q) b而不是p a -> p b的函数的限制似乎在某种程度上可能是根本的?是否有任何链接可以帮助我们比过去更能了解这些内容?

it seems中有关于上述内容以及我们如何使用它的详细信息,以防有人感兴趣。

0 个答案:

没有答案