-
11 votesanswersviews
以CS101学生可以理解的方式描述Damas-Milner类型推断
Hindley-Milner是一种类型系统,是许多众所周知的函数式编程语言的类型系统的基础 . Damas-Milner是一种在Hindley-Milner型系统中推断(推导?)类型的算法 . Wikipedia给出了算法的描述,据我所知,该算法相当于一个单词:"unification."这就是它的全部内容吗?如果是这样,那意味着有趣的部分是类型系统本身而不是类型推断系统 .... -
17 votesanswersviews
Damas-Hindley-Milner类型推理算法实现
我正在寻找有关着名的Damas-Hindley-Milner algorithm函数语言类型推断的信息,特别是有关实现的信息 . 我已经知道如何做Algorithm W,但我听说最近基于约束生成器/求解器的新算法而不是通常的统一 . 但是,我无法找到有关这些新算法实现的任何讨论 . 我知道在哪里可以找到有关ML推理的部分信息吗? -
7 votesanswersviews
将OCaml转换为F#:键入和类型推断之间的差异
在研究F#和OCaml之间的差异时,我发现他们倾向于关注nominative与structural type system . 然后我找到了Distinctive traits of functional programming languages,其中列出了键入和类型推断作为不同的特征 . 由于特质文章说OCaml和F#都使用Damas-Milner类型推断,我认为这是一种标准算法,即一种不允许... -
3 votesanswersviews
走任意深度的OCaml元组
我试图更好地理解OCaml类型推断 . 我创建了这个例子: let rec f t = match t with | (l,r) -> (f l)+(f r) | _ -> 1 我想将它应用于任何具有嵌套对的二元元组(对),以获得叶子的总数 . 示例:f((1,2),3) 函数f拒绝编译,因为(f l)类型中的矛盾:“此表达式具有类型'a但是表达式期望类型为'a *'... -
1 votesanswersviews
Scala:映射字符串时错误的类型推断?
我正在尝试在Scala中编译简单的helloworld,并得到错误“scala:value capitalize不是Char的成员”为什么编译器认为newW是Char? val dict = Map( "hello" -> "olleh", "world" -> "dlrow" ) d... -
406 votesanswersviews
在C#中使用var关键字
在与同事讨论了在C#3中使用'var'关键字后,我想知道人们对通过var的类型推断的适当用法有什么看法? 例如,我在可疑的情况下懒得使用var,例如:- foreach(var item in someList) { // ... } // Type of 'item' not clear. var something = someObject.SomeProperty; // Type of '... -
1 votesanswersviews
函数类型参数的TypeScript类型推断基于其参数类型
我正在尝试在TypeScript中声明一个函数 fun ,该函数使用其类型参数 T 作为约束,可以将哪些键用作另一个函数的参数 context.Foo : interface Context<T> { Foo(key: keyof T) } function fun<T>(provider: (context: Context<T>) => T)... -
3 votesanswersviews
可以't infer the type of instance variable ' @id'的文件
我有以下类实际上是视图模型,我正在尝试基于数据库模型初始化它,如下所示: class Document @id : Int64 @name : String JSON.mapping( id: Int64, name: String, ) def initialize(db_model) @id = db_model.id @nam... -
1 votesanswersviews
使用WebFlux WebTestClient和Kotlin键入干扰问题
我正在使用Spring Webflux和Kotlin为新应用程序构建原型 . Spring Webflux包含用于单元测试的WebTestClient . 根据文档,我应该能够像这样测试REST调用的结果: @Test fun getVersion_SingleResult_ContentTypeJson_StatusCodeOk_ContentEqualsVersion() { //g... -
243 votesanswersviews
Collections.emptyList()返回List <Object>?
我在导航Java规则以推断泛型类型参数时遇到了一些麻烦 . 考虑以下类,它具有可选的list参数: import java.util.Collections; import java.util.List; public class Person { private String name; private List<String> nicknames; public P... -
4 votesanswersviews
如何使F#推断共同基类型?
考虑一下: module Module1 = type A() = class end type B() = inherit A() type C() = inherit A() let f x = if x > 0 then new B() else new C() 最后一行产生关于预期类型B的错误,但是找到了类型C.好吧,我可以假装理解:编译器不知道在... -
45 votesanswersviews
具有通用参数类型的函数
我试图弄清楚如何定义一个适用于多种类型参数的函数(例如int和int64) . 据我所知,F#中无法实现函数重载(当然编译器会抱怨) . 以下面的功能为例 . let sqrt_int = function | n:int -> int (sqrt (float n)) | n:int64 -> int64 (sqrt (float n)) 编译器当然抱怨语法无效... -
9 votesanswersviews
委托/ lambda打字和强制如何工作?
我已经注意到一些在C#中处理lambda函数和匿名委托时工作和不起作用的事例 . 这里发生了什么? class Test : Control { void testInvoke() { // The best overloaded method match for 'Invoke' has some invalid arguments Invoke(doSo... -
3 votesanswersviews
为什么Scala在与@匹配模式时不会推断类型参数
我正在使用Scala 2.10.4和akka 2.3.4 . 我遇到了类型推断不符合我预期的问题 . 下面的代码说明了我遇到的一个例子 . 我有一个案例类,它使用名为 MyMessage 的 id 包装消息 . 它使用消息类型进行参数化 . 然后我有一个名为 MyPayload 的有效负载,其中包含 String . 在一个actor(这里我只是使用一个名为 MyObject 的常规对象,因为问... -
25 votesanswersviews
推断类型似乎检测到无限循环,但实际发生了什么?
在Andrew Koenig的An anecdote about ML type inference中,作者使用merge sort的实现作为ML的学习练习,很高兴找到“不正确”的类型推断 . 令我惊讶的是,编译器报告了一种'list - > int列表换句话说,这个sort函数接受任何类型的列表并返回一个整数列表 . 那是不可能的 . 输出必须是输入的排列;它怎么可能有不同的类型?读者... -
2 votesanswersviews
除了赋值之外的命令式语句的类型推断[关闭]
在我搜索关于命令式语言的类型系统的研究论文时,我只找到了具有可变引用的语言的解决方案,但是没有真正的命令式控制结构,例如复合运算符,循环或条件 . 因此,不清楚如何实现具有部分类型推断的命令式语言,例如http://rust-lang.org . 论文没有提到参数化类型,例如 List of a ,因为参数化类型是Hindley-Milner类型系统的一个简单扩展 - 只有统一算法应该被扩展,其余... -
19 votesanswersviews
理解Hindley-Milner型推理中的多义性
我正在阅读关于Hindley–Milner Type Inference的维基百科文章,试图从中找出一些意义 . 到目前为止,这是我所理解的: 类型分为单型或多型 . Monotypes进一步分类为类型常量(如 int 或 string )或类型变量(如 α 和 β ) . 类型常量可以是具体类型(如 int 和 string )或类型构造函数(如 Map 和 Set ) . 类型... -
11 votesanswersviews
在Hindley-Milner型系统中正确形式的letrec?
我无法理解维基百科上给出的HM系统的letrec定义,这里:https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system#Recursive_definitions 对我来说,规则大致转换为以下算法: 推断 letrec 定义部分中所有内容的类型 为每个定义的标识符分配临时类型变量 以临时类型递归处理所有定义 成对... -
3 votesanswersviews
Rust编译器用什么算法来推断生命周期变量?
fn foo<'a>(x: &'a i32, y: &'a i32) {} fn main() { let a = 123; { let b = 234; foo(&a, &b); } } 在上面的代码中, &a 和 &b 应该是不同生命周期的引用 . 编译器如何推断 foo ... -
10 votesanswersviews
Java中的Hindley-Milner算法
我正在研究一个用Java编写的基于数据流的简单系统(想象它就像一个LabView编辑器/运行时) . 用户可以在编辑器中将块连接在一起,我需要类型推断以确保数据流图是正确的,但是,大多数类型推断示例都是用数学符号,ML,Scala,Perl等编写的,我不会“说” ” . 我读到了关于Hindley-Milner算法的文章,并找到了this文档,其中有一个很好的例子我可以实现 . 它适用于一组T1 ... -
0 votesanswersviews
如何将类型限制为接口的类而不是该接口的实例?
给定模块中的以下接口: module Action abstract def perform end 我想用它来实例化实现它的不同类: class Run include Action def perform puts "run!" end end class Jump include Action def perform put... -
7 votesanswersviews
Scala推断类型参数 - 类型边界推断为'Nothing'
我正在尝试编写一个简单的查询monad,并且无法使我的泛型类型注释正确 . 我的第一次尝试如下(为简洁而大大简化) case class Person( val name: String ) abstract class Schema[T] object People extends Schema[Person] case class Query[U <: Schema[T], T... -
6 votesanswersviews
使用宏构建列表时推断HList类型
我有一个方法采用 HList 并使用它来构建类的实例 . 我想提供一些简化的语法,隐藏明确的缺点 . 所以我想从: MyThingy.describe( 42 :: true :: "string" :: HNil) 至 MyThingy.describe { 42 true "string" } 其中 MyThingy 被定义为 class... -
2 votesanswersviews
Kotlin lambdas和类型推断
我在Kotlin中实现了以下枚举 enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) { PLAY ({ it.playListOwner.Id == "xxx" }), SAVE({true}) } 我想用它来过滤这样的List: var test = playlist... -
11 votesanswersviews
推断通用类型的嵌套静态泛型函数
Java编译器能否从其上下文推断泛型静态函数的类型作为另一个通用静态函数的参数? 例如,我有一个简单的Pair类: public class Pair<F, S> { private final F mFirst; private final S mSecond; public Pair(F first, S second) { mFirs... -
6 votesanswersviews
为什么不能推断出这些类型的论点? [重复]
可能重复:C#3.0泛型类型推断 - 将委托作为函数参数传递 为什么不能推断 Main 中调用中以下代码示例的类型参数? using System; class Program { static void Main(string[] args) { Method(Action); } static void Action(int arg) ... -
3 votesanswersviews
根据呼叫位置输入推断
我想为泛型类创建一个包装函数,如下所示: public class ColumnData { public static ColumnData<T> Create<T>(string name, int width, ColumnType type, Func<T, strin... -
3 votesanswersviews
在Flowable中使用方法引用时,Kotlin无法推断类型
我在Java中有这个代码: Flowable.just(1,2,3) .flatMap(Flowable::just); 这个代码在Kotlin中: Flowable.just(1,2,3) .flatMap(Flowable::just) 虽然Java代码编译得很好,但Kotlin编译器说:“错误:(47,30)Kotlin:类Flowable的一个类型参数:... -
7 votesanswersviews
Java中的泛型类型推断限制
我在使用Java泛型类型推断的项目中面临以下问题 . 这是一个与我原始代码类似的代码示例: public class BuildableObject<R, S> { public static class OneParameter<R> { } public static class TwoParameters<R, S> { } interface... -
406 votesanswersviews
在C#中使用var关键字
在与同事讨论了在C#3中使用'var'关键字后,我想知道人们对通过var的类型推断的适当用途有什么看法? 例如,我在可疑的情况下懒得使用var,例如:- foreach(var item in someList) { // ... } // Type of 'item' not clear. var something = someObject.SomeProperty; // Type of '...