次のような言語はありますか?
1)機能的
2)型推論がある
3)カリー化
4)ファーストクラスの値としてタイプがあります
また、それからJVMおよび/またはCLRにコンパイルしたい
次のような言語はありますか?
1)機能的
2)型推論がある
3)カリー化
4)ファーストクラスの値としてタイプがあります
また、それからJVMおよび/またはCLRにコンパイルしたい
F#は機能的であり、リフレクションを介して実行時に型を分析できるという意味で、型推論、カリー化、および型をファーストクラスの値として備えています。これはCLRにコンパイルされ、Monoでうまく機能します。
例: F#.NETジャーナルの私の(無料ではない)記事Structural Typingから引用:
次のcreateType
関数は、指定された名前の新しい.NETアセンブリ、新しいモジュール、および新しいパブリッククラスタイプを作成します。
> let createType typeName =
let name = System.Reflection.AssemblyName(Name="tmpAssembly")
let run = System.Reflection.Emit.AssemblyBuilderAccess.Run
let builder = System.Threading.Thread.GetDomain().DefineDynamicAssembly(name, run)
let mdl = builder.DefineDynamicModule "tmpModule"
let attrs = TypeAttributes.Public ||| TypeAttributes.Class
mdl.DefineType(typeName, attrs);;
val createType : string -> TypeBuilder
私はそれを学び始めたばかりですが、Coqはあなたのために働くかもしれません。
型(はい、その型のインスタンスではなく、生の型)を取り込んで、別の型(ここでも、インスタンスではなく型だけ)を返す関数を持つことはかなり可能です。プログラムのフォーマル検証に興味がある場合は、一見の価値があります。
また、コードをHaskell / OCaml / Schemeに変換できるというちょっとした利点もあり、CoqにはIO /ライブラリがない傾向があるため、IO/ライブラリを使用できます。
型推論とカリー化がありますが、言語の型システムは標準のMilner-Hindley型システムをはるかに超えている(そしてより表現力がある)ため、型推論は完全ではありません。
Scalaを見てください。JVMと.NETの両方で動作します。ここにあなたが探しているものを含むいくつかの機能があります-http: //www.scala-lang.org/node/104、「Scalaは機能的です」セクション、「ローカル型推論」、「カリー化」および「事前定義された関数classOf」の記事を見てください、また、トップタイプAny、値とタイプのパターンマッチング、リフレクトパッケージがあります。
まず、ウィキペディアタイプの干渉から始めます。この質問に対する答えはHaskellまたはOCamlのようです。