当了解Control.Arrow
和Haskell内置的proc
表示法时,我有一种想法,即该语言作为一般单等分类的eDSL可能非常有用(将***
用于张量和>>>
组成),如果仅将Arrow
类型类推广到允许常规tens :: * -> * -> *
操作而不是Arrow
的{{1}}。
经过研究,我发现GArrows
似乎很适合我的需求。但是,链接的(,) : * -> * -> *
类型类与所谓的“ HetMet” GHC扩展捆绑在一起,并支持我暂时没有多用的其他功能,例如“模式类型”。
鉴于我希望能够使用这样的Garrow
类型类而不必安装非标准的GHC扩展:
在Hackage上是否有一个实际的(有点标准化)库可以满足我对此类通用箭头类型类的需求?
给出了一个这样的库,有没有办法使用这样的GArrow
类型的类并带有“广义GArrow
”表示法,而不必准备我自己的GHC扩展? (也许使用proc
?)
注意:另外,我对准RebindableSyntax
表示法使用准引号也很好。因此,修改this之类的东西以满足我的需求也许并不难。
答案 0 :(得分:6)
我也曾经想过。但是– proc
符号被广泛认为是一个愚蠢的怪胎,以至于对概括也没有太多兴趣(尽管我敢说这实际上会使它有用!)
但是,实际上不需要 具有特殊的语法。这里必须命名的主要参考文献是Conal Elliott在compiling lambda notation to bicartesian closed categories上的著作。我以为到现在为止在Haskell社区中会流行起来,但是某种程度上还没有。无论如何,它都可以作为GHC插件使用。
即使并非始终如此。对于某些类别组合器,您可以只包装在参数中通用量化的值,并将其视为伪返回值。我称这些为Agent
in constrained-categories;不确定它是否对您的应用程序有用,无论如何,您会使用类似箭头的类别can be done做几件事。 (但是,在约束类别中,张量积被固定为(,)
,所以可能不是您想要的。尽管,您能解释一下所需的张量积吗?)