これはa question I asked almost two years agoのフォローアップです。私はまだベクトル/行列/テンソルの次元が型システム(Peanoの番号付け)を使ってコード化されている小さな線形代数ライブラリを書く型システムを試しています。これにより、コンパイラはバイナリ演算を対応する次元のオブジェクトに制限することができます。タイプシステムを使用して整数を数値に変換する
正常に動作しますが、手動で各寸法タイプを指定する必要があります。例えば、(shapeless natural numbersを使用して):
type _1 = Succ[Nat._0]
type _2 = Succ[_1]
type _3 = Succ[_2]
それは小さなサイズのために大丈夫ですが、私はサイズ_1024
を定義する必要がある場合、それは退屈。コンパイル時に整数リテラルを対応するPeano-number型に変換する方法を見つけようとしています(成功なし)。
Daniel Sobral answerコメントでは、Scalaが従属型をサポートしていなかったため、これは不可能であると言われました。現在、Scala 2.10には依存型とマクロの両方があります。だからそれを達成する方法はありますか?
2.10はdefマクロのみをサポートしているので、マクロ天国のhttp: /docs.scala-lang.org/overviews/macros/paradise.html –
スカラサポートは依存していますタイプ?私はそれについていくつかの背景を持つことができますか? – Bill
@Billはマクロの例を見ています。マクロ結果の型は依存型です。 – paradigmatic