在了解Control.Arrow
Haskell的内置proc
表示法时,我想到如果仅将typeclass泛化为允许通用操作而不是通用语言,则该语言可能会作为通用的单曲面类别(***
用于张量和>>>
合成)的eDSL很有用。的。Arrow
tens :: * -> * -> *
Arrow
(,) : * -> * -> *
经过研究后,我发现GArrows
似乎很适合我的需求。但是,链接的Garrow
类型类与所谓的“ HetMet” GHC扩展捆绑在一起,并支持其他功能(暂时而言)(例如,“模式类型”)用处不大。
鉴于我希望能够使用这样的GArrow
类型类而不必安装非标准的GHC扩展:
在Hackage上是否有一个实际的(有点标准化)库可以满足我对此类通用箭头类型类的需求?
有了这样的库,是否有任何方法可以使用这样的GArrow
类型类并使用“通用proc
”表示法,而不必准备自己的GHC扩展?(RebindableSyntax
也许?)
注意:另外,我对准proc
符号使用广义表示法也很好。因此,或许它不会太难修改像这样,以满足我的需求。
我也曾经想过。但是- proc
表示法被广泛认为是一个愚蠢的怪癖,以至于对概括也没有太多兴趣(尽管我敢说这实际上会使它变得有用!)
但是,实际上没有必要使用特殊语法。在这里必须命名的主要参考文献是Conal Elliott所做的关于将lambda表示法编译为双笛卡尔封闭类别的工作。我以为到现在为止在Haskell社区中会流行起来,但是某种程度上还没有。无论如何,它都可以作为GHC插件使用。
即使那也不总是需要的。对于某些类别组合器,您可以只包装在参数中通用量化的值,并将其视为伪返回值。我称这些Agent
为约束类别;不确定这是否可用于您的应用程序,无论如何您都可以完成类似箭头的类别的几项操作。(在约束类别中,张量积被固定为(,)
,所以可能不是您想要的。虽然,您能解释一下所需的张量积吗?)