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つの基本的なSI単位の指数を表す7つのタイプのレベルintのレコード)を定義する能力が必要です。 動的バインディング(オブジェクトを使用する場合)を回避し、コンパイラがそのような式をすべて評価して静的にチェックできるようにするには、この方法で行う必要があります。
現時点では、タイプコンストラクタとして操作を実装するGADTを作成する必要があると私は理解していますが、まだ私はそのアイデアに苦しんでおり、ヒントは非常に高く評価されます。
私はちょうどこれらのスライドを見た;アイデアはとてもシンプルでクールです。しかし、それは私には型レベルの追加だけを処理するようです。シンプルさを保ちながら減算のために働かせる方法はありません。あなたがSI単位を追跡しているなら、あなたは減算(そして負の整数)が必要だと思います。 –
@ジェフリー私はゆっくりと私に来るアイデアをお詫びしますが、OCamlの "GADT"ブランチがあることは知っていますよね? https://sites.google.com/site/ocamlgadt/(明らかに、そのページによれば、私たちは3.13でそれらを取得しています)。 –
はい、私は、 "native" GADTの噂が、OCamlに3.13で来ると聞いてきました。かなり興味深い時です。おそらく、OP(エタオン)が現在のリリースで何かを手に入れたいと思うかもしれませんが、おそらくGADTブランチは受け入れられるでしょう。次元分析は、GADTにとっておそらく良いテストケースのように思えます。 (私は個人的に小さな言語のための通訳ではないいくつかの例のGADTコードを見たいと思っています。)よろしく、 –