是否可以在超类约束中引入其他类型变量?

到处走走

在处理类型族时,使用相等约束通常很方便,以避免必须在签名中重复某些类型函数的名称:

class Foo f where
  type BulkyAssociatedType f :: *
  foo :: BulkyAssociatedType f -> f
  ...

bar :: forall m f b .
       ( Monad m, Foo f, b ~ BulkyAssociatedType f
       , Monoid b, Monoid (m b)
       ) => f -> m f

即使在签名本身中并没有出现缩写,也仅在约束中出现缩写,这才有效。

对于班级,这显然是不可能的。

class ( Foo f, b ~ BulkyAssociatedType f, Monoid b, ...) => Bar f

抱怨类型变量b不在范围内。

是否有某种方法可以达到类似目的,从而避免出现一些重复样板?

杰伯曼

得知您无法做到这一点令我感到惊讶(我使用了相同的技术,并且知道它可以在实例声明中使用),但是似乎存在着长期支持GHC功能的请求

也许您可以ConstraintKinds用来获得相同的好处:

{-# LANGUAGE TypeFamilies , FlexibleContexts , ConstraintKinds #-}
import Data.Monoid

class Foo f where
  type BulkyAssociatedType f :: *

type B f = (Monoid (BulkyAssociatedType f))

class ( Foo f, B f) => Bar f

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

可以在引入其他泛型类型的泛型类上使用构造函数吗?

来自分类Dev

C#App是否可以访问其他类的变量?

来自分类Dev

是否可以在C ++中为矢量(或其他类似数据类型)编写用户迭代类?

来自分类Dev

是否可以在C ++中为矢量(或其他类似数据类型)编写用户迭代类?

来自分类Dev

是否有可能在引入其他泛型类型的泛型类上使用构造函数?

来自分类Dev

是否可以在棘轮连接中存储其他变量

来自分类Dev

抽象类是否可以具有其他抽象类的返回类型的方法?

来自分类Dev

是否可以在其他文件中的其他类主体内创建类而不是 C# 中的声明?

来自分类Dev

查看类型变量是否代表给定Class的超类

来自分类Dev

释放C中的其他变量类型

来自分类Dev

如何访问其他类中的变量

来自分类Dev

从其他类的变量中获取值

来自分类Dev

如何使用其他类中的变量?

来自分类Dev

在 Java 中从其他类调用变量

来自分类Dev

是否可以将组面板包装到Scene Builder中的其他类型的面板中?

来自分类Dev

可以根据表中的另一个约束或其他变量来打开或关闭唯一性

来自分类Dev

如何以可以从 C# 中的其他方法访问的方式存储随机类变量?

来自分类Dev

是否可以忽略sqlalchemy映射类构造函数中的其他关键字?

来自分类Dev

在Haxe中,是否可以使其他类的数组只读?

来自分类Dev

在Haxe中,是否可以使其他类的数组只读?

来自分类Dev

是否可以从其他程序包访问在友好类中构建的公共构造函数?

来自分类Dev

是否有其他方法可以将 DI 容器引用存储在 Application 变量中?

来自分类Dev

检查QVariant是否可以转换为其他QVariant类型

来自分类Dev

是否可以在类中添加静态类型?

来自分类Dev

在Scala中是否可以指定对通用类型τ的约束,以使τ<:σ∧τ≠σ?

来自分类Dev

如何让变量依赖于类中的其他变量?

来自分类Dev

如何在Perl中设置类似Java的“静态变量”,其他类可以访问该静态变量?

来自分类Dev

在 ArrayList 类型的变量中引入元素

来自分类Dev

是否可以将枚举类型作为参数传递并在其他函数中重用此类型?

Related 相关文章

  1. 1

    可以在引入其他泛型类型的泛型类上使用构造函数吗?

  2. 2

    C#App是否可以访问其他类的变量?

  3. 3

    是否可以在C ++中为矢量(或其他类似数据类型)编写用户迭代类?

  4. 4

    是否可以在C ++中为矢量(或其他类似数据类型)编写用户迭代类?

  5. 5

    是否有可能在引入其他泛型类型的泛型类上使用构造函数?

  6. 6

    是否可以在棘轮连接中存储其他变量

  7. 7

    抽象类是否可以具有其他抽象类的返回类型的方法?

  8. 8

    是否可以在其他文件中的其他类主体内创建类而不是 C# 中的声明?

  9. 9

    查看类型变量是否代表给定Class的超类

  10. 10

    释放C中的其他变量类型

  11. 11

    如何访问其他类中的变量

  12. 12

    从其他类的变量中获取值

  13. 13

    如何使用其他类中的变量?

  14. 14

    在 Java 中从其他类调用变量

  15. 15

    是否可以将组面板包装到Scene Builder中的其他类型的面板中?

  16. 16

    可以根据表中的另一个约束或其他变量来打开或关闭唯一性

  17. 17

    如何以可以从 C# 中的其他方法访问的方式存储随机类变量?

  18. 18

    是否可以忽略sqlalchemy映射类构造函数中的其他关键字?

  19. 19

    在Haxe中,是否可以使其他类的数组只读?

  20. 20

    在Haxe中,是否可以使其他类的数组只读?

  21. 21

    是否可以从其他程序包访问在友好类中构建的公共构造函数?

  22. 22

    是否有其他方法可以将 DI 容器引用存储在 Application 变量中?

  23. 23

    检查QVariant是否可以转换为其他QVariant类型

  24. 24

    是否可以在类中添加静态类型?

  25. 25

    在Scala中是否可以指定对通用类型τ的约束,以使τ<:σ∧τ≠σ?

  26. 26

    如何让变量依赖于类中的其他变量?

  27. 27

    如何在Perl中设置类似Java的“静态变量”,其他类可以访问该静态变量?

  28. 28

    在 ArrayList 类型的变量中引入元素

  29. 29

    是否可以将枚举类型作为参数传递并在其他函数中重用此类型?

热门标签

归档