OCaml (3.12) で型レベルの整数を作成し、それらの加算および減算操作をサポートすることについて、提案/アドバイスをくれる人はいますか?
たとえば、次のように表された数値があるとします。
type zero
type 'a succ
type pos1 = zero succ
type pos2 = zero succ succ
...
次のような型で関数を定義する方法が必要です。
val add: pos2 -> pos1 -> pos3
少し背景: 物理的な次元の演算用にいくつかの haskell コードを移植しようとしていますが、次元の型 (7 つの基本 SI 単位の指数を表す 7 つの型レベルの int の記録) の演算を定義する機能が必要です。動的バインディング (オブジェクトを使用する場合) を回避し、コンパイラがそのようなすべての式を静的に評価およびチェックできるようにするために、この方法で行う必要があります。
私の現在の理解では、操作を型コンストラクターとして実装する GADT を作成する必要がありますが、それでも私はその考えに苦労しており、ヒントがあれば大歓迎です。