如何制作约束条件函数(||-)? (关联的类型同义词)

时间:2019-12-31 06:42:06

标签: haskell

我只是一个爱好专业,不涉足计算科学与工程专业。

最近,我做了一种很小的函数式编程语言:https://github.com/mecheng98/nabi

但是nabi是无类型的,因此我想向其添加类型检查器。

实现一个基于haskell98的类型检查器是我的一个具体目标,但它仅支持“关联类型同义词”扩展。

我正确地读了论文Associated Type Synonyms,然后尝试制作约束约束函数(||-)。

但是我做不到,因为对我来说很难让(||-)应用推理规则“ EQ_subst”并且不会陷入无限循环。

请您给我一个提示(||-),并教我如何实现自己的目标?

+)我对THIH印象深刻,所以我希望扩展THIH的实现以实现我的目标,例如:

data Type
  = TVar TyVar
  | TCon TyCon
  | TAp Type Type
  | TGen Int
  deriving Eq

data Pred
  = IsIn Id Type
  | IsEq Type Type
  deriving Eq

entails :: ClassEnv -> [Pred] -> Pred -> Bool
entails = undefined

reduce :: Monad m => ClassEnv -> [Pred] -> m [Pred]
reduce = undefined

非常感谢您阅读我的问题。新年快乐。

1 个答案:

答案 0 :(得分:2)

  

我正确阅读了“关联类型同义词”一文,然后尝试制作约束约束函数(||-)。

     

但是我做不到,因为对我来说很难让(||-)应用推理规则“ EQ_subst”并且不会陷入无限循环。

这听起来像是尝试直接实现键入规则(图2),但是仅凭这些规则并不能提供有效的类型检查过程。本文还提出了一种类型推断算法(第5节;图4、5),这是应该实现的。要继续阅读本节,您可能首先需要对Hindley-Milner类型的推断和统一有一个很好的了解。

  • Simon Peyton Jones,
  • GHC的类型推断实际上是如何工作的(talk
  • ML类型推断(PDF),FrançoisPottier和DidierRémy的本质