首页 > 解决方案 > 将自身作为参数的函数的 Hindley-Milner 类型

问题描述

假设您有一个函数 f 将按如下方式使用:

(f f (x-1)) 

关于 f 的类型,你能推断出什么?

它似乎是递归的,即f :: (ftype) -> int -> int。

标签: haskellhindley-milner

解决方案


如果函数的参数是该函数本身,那么该类型必须是递归的和无限的,这在 Haskell 中是非法的。然而,有一个漏洞:如果函数在那个参数中是多态的,那么它很好(尽管作为一个函数可能不是很有用)。有效的两个示例fidand const id(其中任何一个都f f (x-1)将评估为x-1)。


推荐阅读