“通用箭头”和proc表示法?

Nat*_*ell 12 haskell arrows ghc category-abstractions

在了解Control.ArrowHaskell的内置proc表示法时,我想到如果仅将typeclass泛化为允许通用操作而不是通用语言,则该语言可能会作为通用的单曲面类别(***用于张量和>>>合成)的eDSL很有用。的。Arrowtens :: * -> * -> *Arrow(,) : * -> * -> *

经过研究后,我发现GArrows似乎很适合我的需求。但是,链接的Garrow类型类与所谓的“ HetMet” GHC扩展捆绑在一起,并支持其他功能(暂时而言)(例如,“模式类型”)用处不大。

鉴于我希望能够使用这样的GArrow类型类而不必安装非标准的GHC扩展:

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

  2. 有了这样的库,是否有任何方法可以使用这样的GArrow类型类并使用“通用proc”表示法,而不必准备自己的GHC扩展?(RebindableSyntax也许?)

注意:另外,我对准proc符号使用广义表示法也很好。因此,或许它不会太难修改像这样,以满足我的需求。

lef*_*out 6

我也曾经想过。但是- proc表示法被广泛认为是一个愚蠢的怪癖,以至于对概括也没有太多兴趣(尽管我敢说这实际上会使它变得有用!)

但是,实际上没有必要使用特殊语法。在这里必须命名的主要参考文献是Conal Elliott所做的关于将lambda表示法编译为双笛卡尔封闭类别的工作。我以为到现在为止在Haskell社区中会流行起来,但是某种程度上还没有。无论如何,它都可以作为GHC插件使用。

即使那也不总是需要的。对于某些类别组合器,您可以只包装在参数中通用量化的值,并将其视为伪返回值。我称这些Agent为约束类别;不确定这是否可用于您的应用程序,无论如何您都可以完成类似箭头的类别的几项操作。(在约束类别中,张量积被固定为(,),所以可能不是您想要的。虽然,您能解释一下所需的张量积吗?)