当前位置: 首页 > 知识库问答 >
问题:

类型类、关联族->容器、键和元素:谁是谁?

羊舌诚
2023-03-14

在阅读haskellwiki上的类型族时,我看到了以下示例

class Collects ce where
  type Elem ce
  empty  :: ce
  insert :: Elem ce -> ce -> ce
 class GMapKey k where
   data GMap k :: * -> *
   empty       :: Gmap k v
   insert      :: k -> v -> GMap k v -> Gmap k v

地图收集了vs,感觉比vs和KS大。但似乎GMapKey有一个关联的GMap,而我原本以为这个关系是相反的。

当我在数据族和类型同义词族之间进行选择时,这是要遵循的模式吗(数据族:container是关联的类型,类型同义词族:element是关联的类型)?或者这是一个/有一个区别不相关,两个例子本来可以互换?

共有1个答案

夹谷星河
2023-03-14

我建议这样考虑:GMAP族与K相关联,您必须有一个与K相关联的GMAP类型族实例,以便K用作GMapKey

在这些选项之间的选择更多地取决于您的需求,而不是其他任何东西。当键类型指示映射实现时,GMAP K方法更可取:例如,对Int键使用IntMap;但对其他键使用另一种类型的map

 类似资料:
  • 关联类型 定义一个协议时, 有时在协议定义里声明一个或多个关联类型是很有用的. 关联类型给协议中用到的类型一个占位符名称. 直到采纳协议时, 才指定用于该关联类型的实际类型. 关联类型通过associatedtype关键字指定. 关联类型的应用 protocol Container { associatedtype ItemType mutating func append(_ i

  • 使用“关联类型”可以增强代码的可读性,其方式是移动内部类型到一个 trait 作为output(输出)类型。这个 trait 的定义的语法如下: // `A` 和 `B` 在 trait 里面通过`type` 关键字来定义。 // (注意:此处的 `type` 不同于用作别名时的 `type`)。 trait Contains { type A; type B; // 通常

  • in HTML and XML documents, when you expand abbreviations, all abbreviation parts are transformed on-the-fly into HTML/XML tags. But certain elements like a or img are transformed into elements with pr

  • 问题内容: 当我学习JSF中的自定义组件开发时,我对组件族,组件类型和渲染器类型之间的关系感到困惑。例如,我注册了渲染器和自定义组件,如下所示。 : 我还在文件中注册了一个新标签,如下所示: 此配置效果很好。但是,我不明白为什么渲染器注册需要该行。在中,已连接组件和渲染器,恕我直言,应该已经足够为该组件选择合适的渲染器。附加参数有什么用? 我对Google进行了研究,得出的所有答案都是“一个渲染器

  • 关联类型是 Rust 类型系统中非常强大的一部分。它涉及到‘类型族’的概念,换句话说,就是把多种类型归于一类。这个描述可能比较抽象,所以让我们深入研究一个例子。如果你想编写一个Graph trait,你需要泛型化两个类型:点类型和边类型。所以你可能会像这样写一个 trait,Graph<N, E>: trait Graph<N, E> { fn has_edge(&self, &N, &N

  • 我已经找了一段时间了,但是找不到一个明确的答案。 很多人说使用联合来键入双关语是不明确的,也是不好的做法。这是为什么呢?我看不出它会做任何未定义的事情的任何理由,考虑到你写入原始信息的内存不会自动改变(除非它超出了堆栈的范围,但这不是一个联合问题,这将是一个糟糕的设计)。 人们引用严格的混淆现象规则,但在我看来,这就像说你做不到,因为你做不到。 此外,如果不打双关语,工会还有什么意义?我在某个地方