【发布时间】:2019-11-11 03:57:11
【问题描述】:
我在this post 中读到,机器学习方言不允许非地面类型的类型变量。例如。最后一条语句不可表示:
-- Haskell code
type Ground = Int
type FirstOrder a = Maybe a
type SecondOrder c = c Int -- ML do not allow :c
OCaml 仅在模块级别支持更高种类。有一些解释(here 和作者的评论here)关于 OCaml 的哪些功能与更高种类的类型机会发生冲突。
如果我理解正确的话,主要问题在于以下事实:
- OCaml 不遵循类型定义的“新鲜度”限制:构造
type可以定义别名(类型将保持不变)和新的新鲜类型 - 类型别名定义可以隐藏
AFAIK,标准 ML 对类型定义和别名有不同的构造:type 用于别名,datatype 用于新类型的引入。
不幸的是,我对 SML 的了解不够——是否可以导出类型别名并隐藏其定义?如果有任何其他 SML 功能仍然不能很好地适应更高种类的类型的机会,有人可以告诉我吗?
仿函数可能会出现一些问题——能否提供一个代码示例?这类案例我听过好几次了,但还是没有找到完整的例子。
【问题讨论】:
标签: sml language-design higher-kinded-types