9

有没有一种语言,即:

1) 功能性

2) 有类型推断

3)有咖喱

4) 并将类型作为一等值

也想从它编译到 JVM 和/或 CLR

4

4 回答 4

24

F# 是函数式的,并且具有类型推断、柯里化和类型作为一等值,因为您可以通过反射在运行时剖析类型。它编译到 CLR 并且在 Mono 上运行良好。

示例:取自我在F#.NET Journal中的(非免费)文章结构类型:

以下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
于 2013-01-25T21:05:05.240 回答
7

我刚开始学习它,但Coq可能对你有用。

很可能有一个函数接受一个类型(是的原始类型,不是该类型的实例)并返回另一种类型(同样,只是类型,而不是实例)。如果您对程序的形式验证完全感兴趣,那么值得一看。

它还有一个小小的好处,就是能够将其代码转换为 Haskell/OCaml/Scheme,这样您就可以使用它们的 IO/Libraries,因为 Coq 往往缺少它们。

它具有类型推断和柯里化,但类型推断并不完美,因为该语言的类型系统远远超出(并且比标准 Milner-Hindley 类型系统更具表现力)。

于 2013-01-25T23:35:44.450 回答
2

看看Scala,它适用于 JVM 和 .NET。这里有一些特性,包括你所寻求的 - http://www.scala-lang.org/node/104,查看“Scala is functional”部分、“Local Type Inference”、“Currying”和“Predefined function classOf”文章,它也有顶级类型Any,值类型的模式匹配,反映包。

于 2013-01-27T03:10:57.377 回答
-1

首先从维基百科类型的干扰开始。这个问题的答案似乎是 Haskell 或 OCaml。

于 2013-01-25T09:58:03.397 回答