gpt4 book ai didi

haskell - 为什么基本 Prelude 算术不需要显式类型?

转载 作者:行者123 更新时间:2023-12-03 22:15:58 26 4
gpt4 key购买 nike

我是answering a question并编写了一些代码来完成工作。

isPrime :: Int -> Bool
isPrime n = primeCheck n $ floor $ sqrt $ (fromIntegral n :: Double)

我假设需要显式类型签名,如我的回答中所述。然后我在 GHC 和 GHCi 中检查了它,发现尽管 floor 我不需要显式类型进行转换。和 sqrt是多态的。我知道 GHCi does does some type defaulting ,但我不知道 GHC 中有任何内容。显然都是 FloatDouble在这里将是有效的选择,为什么 GHC 选择一个而不是另一个?默认是什么类型,为什么(大概)GHC 在这种情况下默认?

最佳答案

GHC 也进行类型默认,至少每当您导出模块时,它会将任何模棱两可的数字类型单态化为 default 中的类型。模块的类型,默认为:

default (Integer, Double)

请参阅 Haskell specification 中的“4.3.4 重载数值运算的歧义类型和默认值”一节。 .

您可以使用编译指示 {-# LANGUAGE NoMonomorphismRestriction #-} 禁用它。在要导出的模块中使用 顶层 数字多态类型保持不变。

关于haskell - 为什么基本 Prelude 算术不需要显式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943624/

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