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

时间:2019-06-16 16:20:34

标签: haskell ghc arrows category-abstractions

当了解Control.Arrow和Haskell内置的proc表示法时,我有一种想法,即该语言作为一般单等分类的eDSL可能非常有用(将***用于张量和>>>组成),如果仅将Arrow类型类推广到允许常规tens :: * -> * -> *操作而不是Arrow的{​​{1}}。

经过研究,我发现GArrows似乎很适合我的需求。但是,链接的(,) : * -> * -> *类型类与所谓的“ HetMet” GHC扩展捆绑在一起,并支持我暂时没有多用的其他功能,例如“模式类型”。

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

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

  2. 给出了一个这样的库,有没有办法使用这样的GArrow类型的类并带有“广义GArrow”表示法,而不必准备我自己的GHC扩展? (也许使用proc?)

注意:另外,我对准RebindableSyntax表示法使用准引号也很好。因此,修改this之类的东西以满足我的需求也许并不难。

1 个答案:

答案 0 :(得分:6)

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

但是,实际上不需要 具有特殊的语法。这里必须命名的主要参考文献是Conal Elliott在compiling lambda notation to bicartesian closed categories上的著作。我以为到现在为止在Haskell社区中会流行起来,但是某种程度上还没有。无论如何,它都可以作为GHC插件使用。

即使并非始终如此。对于某些类别组合器,您可以只包装在参数中通用量化的值,并将其视为伪返回值。我称这些为Agent in constrained-categories;不确定它是否对您的应用程序有用,无论如何,您会使用类似箭头的类别can be done做几件事。 (但是,在约束类别中,张量积被固定为(,),所以可能不是您想要的。尽管,您能解释一下所需的张量积吗?)