“广义箭头”和过程符号?

问题描述 投票:0回答:1

在学习

Control.Arrow
和 Haskell 的内置
proc
表示法时,我想到这种语言可能会被证明作为一般幺半群类别的 eDSL 非常有用(使用
***
表示张量,使用
>>>
表示组合),如果只有
Arrow
类型类被泛化以允许通用
tens :: * -> * -> *
操作而不是
Arrow
(,) : * -> * -> *

经过一番研究,我发现

GArrows
,这似乎符合我的需求。然而,链接的
Garrow
类型类与所谓的“HetMet”GHC 扩展捆绑在一起,并支持其他功能(无论如何,暂时),我没有太多用处,例如“模态类型” ”.

鉴于我希望能够使用这样的

GArrow
类型类,而无需安装非标准 GHC 扩展:

  1. Hackage 上是否有一个实际的(某种程度上标准化的)库可以满足我对这种通用箭头类型类的需求?

  2. 给定这样一个库,有没有办法使用这样一个带有“广义

    GArrow
    ”符号的
    proc
    类型类,而不必编写我自己的GHC扩展? (也许还有
    RebindableSyntax
    ?)

注意:另外,我很喜欢使用准引号来表示广义的

proc
表示法。因此,修改像this这样的东西来满足我的需求也许不会太困难。

haskell ghc arrow-abstraction category-abstractions
1个回答
6
投票

我以前也想过这个问题。但是 –

proc
表示法被广泛认为是一种愚蠢的奇怪现象,以至于人们可能对泛化也没有太多兴趣(尽管我敢说这才是让它真正有用的原因!)

但是,实际上并不是必须有特殊的语法。这里必须提到的主要参考文献是 Conal Elliott 的《将 lambda 表示法编译为双笛卡尔封闭类别》的工作。我以为这会在 Haskell 社区中流行一段时间,但不知何故没有。无论如何,它可以作为 GHC 插件使用。 即使这样也并不总是需要的。对于某些类别组合器,您可以只包装参数中普遍量化的值,并将其视为伪返回值。我将这些称为“受限类别”中的“

Agent”;不确定这是否适用于您的应用程序,无论如何,您可以使用类似箭头的类别完成一些事情

可以完成
。 (然而,在约束类别中,张量积固定为 (,),所以可能不是您想要的。不过,您能解释一下您需要什么张量积吗?)
	

© www.soinside.com 2019 - 2024. All rights reserved.