任何人都可以给我关于在OCaml(3.12)中支持对它们进行加法和减法操作的类型级别整数的建议/建议吗?ocaml中的类型级别整数
举例来说,如果我有这样表示的数字:
type zero
type 'a succ
type pos1 = zero succ
type pos2 = zero succ succ
...
我需要一种方法来定义的类型的功能是这样的:
val add: pos2 -> pos1 -> pos3
小背景: 我试图端口一些haskell代码的物理维度上的操作,我需要能够定义尺寸类型(表示7个基本国际单位指数的7个级别整数的记录)的操作。 我需要这样做,以避免动态绑定(使用对象时)并使编译器能够静态评估和检查所有这些表达式。
我目前的理解是,我应该做一个GADT实现操作作为类型构造函数,但仍然在挣扎着这个想法,任何提示都将不胜感激。
我只是看着这些幻灯片;这个想法很简单,很酷。但在我看来,它只处理类型级别的添加。我没有看到一种方法可以在保持简单性的同时使它适用于减法。如果你跟踪国际单位,我想你需要减法(和负整数)。 –
@Jeffrey我很抱歉给我这么慢的想法,但你知道OCaml有一个“GADT”分支,对不对? https://sites.google.com/site/ocamlgadt/(显然,根据该页面,我们得到他们与3.13)。 –
是的,我听说3.13版本中有关“本地”GADT传入OCaml的传言,这将是相当有趣的时代。我想也许OP(etaion)想要使用当前发行版,但也许GADT分支可以接受。对于GADT来说,维度分析似乎是一个很好的测试用例。 (我个人很喜欢看到一些GADT代码,它不是小语言的解释器。)问候, –