Haskell Hindley Milner能返回多个错误吗?

Haskell Hindley Milner能返回多个错误吗?,haskell,type-inference,typechecking,type-theory,hindley-milner,Haskell,Type Inference,Typechecking,Type Theory,Hindley Milner,我对类型推断非常陌生,我想知道HM是否有好的扩展或论文可以允许多个错误 我可能遗漏了一些内容,但如果出现统一错误,类型检查器是否可以在类型上下文“中毒”的情况下继续执行?您可以通过忽略所有或部分有问题的统一来从统一错误(包括发生检查失败)中恢复,也可以从“未知标识符”中恢复使用新类型变量键入标识符时出错。即使您决定部分处理特定的统一,也很容易安排不“毒害”您的类型上下文 更具体地说,如果您正在实现某个版本的,那么粗略地说,程序文本完全决定了一个递归构造的“指令”序列来转换类型上下文。唯一可能失败

我对类型推断非常陌生,我想知道HM是否有好的扩展或论文可以允许多个错误


我可能遗漏了一些内容,但如果出现统一错误,类型检查器是否可以在类型上下文“中毒”的情况下继续执行?您可以通过忽略所有或部分有问题的统一来从统一错误(包括发生检查失败)中恢复,也可以从“未知标识符”中恢复使用新类型变量键入标识符时出错。即使您决定部分处理特定的统一,也很容易安排不“毒害”您的类型上下文

更具体地说,如果您正在实现某个版本的,那么粗略地说,程序文本完全决定了一个递归构造的“指令”序列来转换类型上下文。唯一可能失败的“指令”是在[Var]中查找未知标识符的polytype和[App]中的统一步骤。其他一切(在[Var]中实例化一个多类型、在[App]和[Abs]中创建新的类型变量、在[Let]中将一个单类型泛化为一个多类型、或者在[Abs]和[Let]中扩充类型上下文)都不可能失败,假设类型上下文表示实际上没有损坏


统一“指令”通常被实现为一个递归,在将一系列类型变量绑定到单类型之前,该递归将匹配基本类型构造函数(函数箭头
(>)
、对、列表或任何其他包含的基本类型)。根据表示统一结果的方式,您可能会发现,只要在任何类型构造函数不匹配(尝试统一函数和对等)时修剪递归并跳过任何未通过occurs检查的尝试绑定,您的类型上下文就会处于有效状态,因此,类型检查可以继续进行,并可能产生其他信息错误。

Hindley Milner是一种类型推断算法。你大概是在谈论用某种语言实现该算法。您能否更具体地说明您要完成的任务?GHC类型检查器通常会返回多个类型错误。也许你应该看看这个。