在了解 Control.Arrow
时和 Haskell 的内置 proc
表示法,我的想法是,如果仅使用 ***
,那么这种语言可能会被证明是非常有用的 eDSL,用于一般的 monoidal 类别(使用 >>>
用于张量和 Arrow
用于组合)类型类被泛化以允许通用 tens :: * -> * -> *
操作而不是 Arrow
的(,) : * -> * -> *
.
经过一番研究,我发现 GArrows
,这似乎符合我的需要。但是,链接的 Garrow
typeclass 与所谓的“HetMet”GHC 扩展捆绑在一起,并支持其他我没有太多用处的特性(无论如何),例如“模态类型”。
鉴于我希望能够使用这样的 GArrow
无需安装非标准 GHC 扩展的 typeclass:
GArrow
使用“通用 proc
”符号键入类,而无需编写我自己的 GHC 扩展? (也许是 RebindableSyntax
?)注意:另外,我可以使用 quasiquotation 进行广义
proc
符号。所以也许修改像 this 这样的东西不会太难以满足我的需要。
最佳答案
我以前也想过这个问题。但是——proc
符号被广泛认为是一个愚蠢的怪人,可能对泛化也没有太大兴趣(尽管我敢说这是使它真正有用的原因!)
然而,实际上没有必要有特殊的语法。此处必须提及的主要引用资料是 Conal Elliott 在 compiling lambda notation to bicartesian closed categories 上的工作。 .我认为这会在一段时间后在 Haskell 社区中流行起来,但不知何故没有。无论如何,它都可以作为 GHC 插件使用。
即使这并不总是需要的。对于某些类别组合器,您可以只包装一个在参数中普遍量化的值,并将其视为伪返回值。我调用那些 Agent
in constrained-categories ;不确定这是否适用于您的应用程序,无论如何,您会使用类似箭头的类别来做几件事 can be done . (在受限类别中,张量积固定为 (,)
,但是,可能不是您想要的。虽然,您能解释一下您需要什么张量积吗?)
关于haskell - "Generalized arrows"和 proc 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620644/