写给凡人的 ML 模块系统:模块自己也有类型
来源:thunderseethe.dev — 2026-11-12
📋 概述
SML 在 1983 年就有了 ML 模块,可到今天只有 OCaml 一门生产语言在用。作者用一套越来越像 Rust 的虚构语法逐步讲清:ML 的模块既能装函数也能装类型定义,模块本身还有类型,叫 signature;把一个模块匹配到某个 signature 就能隐藏内部实现,还能拿旧模块「造」出受限的新视图。这套表达力正是它没普及却仍然值得学的原因。
🔑 核心要点
- 模块里可以放类型定义(如 Set = Vec<i32>),模块内函数可以直接引用这些类型
- 模块的类型叫 signature,逐条声明每个定义及其类型,作用类似 Rust 的 trait
- 匹配签名即封装:从签名里删掉 index_of,外部看到的就是精简 API,模块内部照旧可用
- 还能把已有模块匹配到新签名,造出「只能插入的集合」这类受限视图,实现一行不改
- 文章最后才回答「为什么要有 ML 模块」,前面全部用代码堆出直觉
- 全部复杂度与表达力,都来自模块拥有签名这一件事
💡 金句
模块拥有签名,是理解 ML 模块最重要的一件事。
← 返回 Lobsters 首页
👍 0
👎 0