haskell - "Generalized arrows"和 proc 符号?

标签 haskell ghc arrows category-abstractions

在了解 Control.Arrow 时和 Haskell 的内置 proc表示法,我的想法是,如果仅使用 ***,那么这种语言可能会被证明是非常有用的 eDSL,用于一般的 monoidal 类别(使用 >>> 用于张量和 Arrow 用于组合)类型类被泛化以允许通用 tens :: * -> * -> *操作而不是 Arrow(,) : * -> * -> * .

经过一番研究,我发现 GArrows ,这似乎符合我的需要。但是,链接的 Garrow typeclass 与所谓的“HetMet”GHC 扩展捆绑在一起,并支持其他我没有太多用处的特性(无论如何),例如“模态类型”。

鉴于我希望能够使用这样的 GArrow无需安装非标准 GHC 扩展的 typeclass:

  • Hackage 上是否有一个实际的(有些标准化的)库可以满足我对这种通用箭头类型类的需求?
  • 给定这样一个库,有没有办法使用这样的 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/

    相关文章:

    haskell - 更改 Writer monad 中的写入数据

    haskell - 使用 ghc 编译 Haskell 代码时出现特化警告

    haskell - 异构列表的笛卡尔积

    haskell - 特殊括号 (| ... |) 脱糖成什么?

    haskell - 如何将 &&& 与 a -> 一起使用

    haskell - 如何为 Haskell 记录自定义 Show 实例?

    haskell - 如何获得离线 Haskell 调试跟踪?

    haskell - 如何在 Haskell 中获取小数并将其转换为数字列表?

    haskell - 编译到 GHC 核心

    haskell - 使用箭头生成深度嵌套的记录