【发布时间】:2021-07-19 02:42:21
【问题描述】:
我正在尝试使用基于 Hindley-Milner 算法的类型推断来实现语言。但我不知道如何推断递归函数的类型:
f = g
g = f
在这里,我必须一起为f 和g 生成和解决约束,因为如果我更早地为一个函数执行此操作,它将不知道另一个函数的类型。但我不能同时为模块中的所有功能做这件事:
f = h 0
g = h "str"
h _ = 0
在f 我有h :: Int -> Int 在g 我有h :: String -> Int,如果我同时解决它会产生错误,但如果我会推断h 的类型则不会f 和 g 的类型之前(h :: forall a. a -> Int 并且可以在 f 和 g 中使用不同的替换 a)。
如何推断这些类型?
【问题讨论】:
标签: haskell recursion type-inference hindley-milner