gpt4 book ai didi

haskell - 使用 Int 类型与积分约束。优势?

转载 作者:行者123 更新时间:2023-12-01 09:38:22 31 4
gpt4 key购买 nike

考虑这些(或多或少)等价的类型签名:

f1 :: [a] -> Int -> a
f2 :: Integral b => [a] -> b -> a

f2f1 更通用,这是一个很大的优势,但是 f1f2 有优势吗?

似乎在 H-99 问题的解决方案中,以及在许多已发布的各种欧拉计划问题的解决方案中,f1 形式出现的频率远高于 f2.

我不知道为什么。仅仅是程序员的懒惰,还是使用更通用的版本(f2)会降低性能,还是有其他原因?

最佳答案

  • 这通常是因为人们希望将积分与来自 length 的结果和其他已经受限于 Int 的函数结合使用。虽然经常有 generic* 函数,例如 genericLength,但这些名称较长且不在 Prelude 中。

  • Int 的性能更容易理解。 Integral a 的性能在很大程度上取决于函数是否专门针对 Integral 的特定实例。

  • Int 通常不仅足够而且诚实。例如,假设您的编译器使用机器字或更大的 Ints 而不是该死的标准29+ bits .

  • 过度使用类型类会混淆签名,使语言的可读性降低。如果极端泛化变得普遍,特别是对于原始函数,我认为我们需要找到一种更简洁的方式来表达约束,以免让程序员发疯。

关于haskell - 使用 Int 类型与积分约束。优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3920891/

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