Lobsters | 原文链接 | 2026-09-02 收录

类型类的一致性:为什么孤儿实例会破坏全局相干

来源: osa1.net — 2026-08-29

概述

作者用 Haskell 与 Rust 的视角深入剖析类型类(typeclass)的一致性(coherence)属性。一致性保证:同一约束在程序任意位置解析到的是同一个实例,从而序列化格式、哈希函数、打印格式在不同库之间都能保持一致。文中用一个具体例子展示:即使每个模块各自是相干的,把两个模块的孤儿实例(orphan instance)组合进同一个 main 后,整体却可能变得不相干。作者借此说明为什么孤儿实例是危险的——它们破坏了类型类系统赖以成立的全局相干性,这也正是 Rust 禁止孤儿实例而 Haskell 允许的原因所在。

核心要点

金句

如果同一个 Hash String 在不同代码路径解析出不同实例,数据结构的不变量就会在不知不觉间被打破。
返回 Lobsters 首页