gpt4 book ai didi

haskell - 为什么把sq改成point-free会改变类型

转载 作者:行者123 更新时间:2023-12-04 05:40:21 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
What is going on with the types in this ghci session?



为了尝试和练习一些 Haskell 并了解 point free 我正在玩一个函数来平方一个数字

所以我开始定义
>let dup f x = f x x

所以我可以根据 dup 重写 sq (现在不用担心让 dup 点免费)
>let sq x = dup (*) x

并检查 sq 的类型 我看到了我期望看到的
>:t sq
>sq :: Num t => t -> t

所以我删除了 x 并得到
>let sq = dup (*)
>:t sq
sq :: Integer -> Integer

我错过了什么?

最佳答案

您遇到了单态限制。 Haskell 不会推断函数的多态类型,除非它们以“函数”样式(不是无点)给出。这意味着 let sq = dup (*)不会进行类型检查,但是 Haskell 对标准数字类有所谓的“默认规则”,这意味着它默认为单态类型“Integer->Integer”

Prelude> :set -XNoMonomorphismRestriction
Prelude> let dup f x = f x x
Prelude> let sq = dup (*)
Prelude> :t sq
sq :: Num t => t -> t

关于haskell - 为什么把sq改成point-free会改变类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com