haskell - 将自身作为参数的函数的 Hindley-Milner 类型
问题描述
假设您有一个函数 f 将按如下方式使用:
(f f (x-1))
关于 f 的类型,你能推断出什么?
它似乎是递归的,即f :: (ftype) -> int -> int。
解决方案
如果函数的参数是该函数本身,那么该类型必须是递归的和无限的,这在 Haskell 中是非法的。然而,有一个漏洞:如果函数在那个参数中是多态的,那么它很好(尽管作为一个函数可能不是很有用)。有效的两个示例f
是id
and const id
(其中任何一个都f f (x-1)
将评估为x-1
)。
推荐阅读
- sql - 无法增加数据库会话数
- c - sc_memset 中的 volatile 参数
- android - 为什么在颤动的 android 和 ios 上的 BottomAppBar 高度存在差异?
- python - Altair 使用另一个下拉菜单控制一个下拉菜单
- laravel - 外键列的雄辩之和
- c# - 检查当前用户是否在 APS.NET MVC 5 中被阻止的消息处理程序
- python - Python - 与字符串一起获取匹配的字符串百分比
- c# - 我得到一个错误,不能隐式转换 int 类型?诠释。存在显式转换(您是否缺少演员表?)
- sql - SQL Count Case NOT COUNT 多个字符串
- python-2.7 - 通配符更改时具有不同默认文件名的pyface FileDialog