haskell 错误: Couldn't match expected type `Integer' against inferred type `Int'

标签 haskell types integer

我有一个 haskell 函数,可以计算有限整数列表的大小。我需要输出类型为 Integer,因为该值实际上会大于 Int 的最大界限(如果输出类型为 Int,则结果将准确为 -1)

size :: a -> Integer
size a =  (maxBound::Int) - (minBound::Int)

我理解整数(有界)和整数(无界)之间的区别,但我想从整数创建整数。我想知道是否有像 fromInteger 这样的函数,它允许我将 Int 转换为 Integer 类型。

最佳答案

您需要将值转换为整数,这可以通过 fromIntegral 函数(Haskell 的数字转换)来完成:

fromIntegral :: (Integral a, Num b) => a -> b

它将 Integral 类中的任何类型转换为(更大的)Num 类中的任何类型。例如

fromIntegral (maxBound::Int) - fromIntegral (minBound::Int)

但是,我不太相信您所采取的方法——它看起来非常脆弱。存在允许环绕的类型时的行为非常可疑。

你真正的意思是什么:“有限整数列表的大小”。如果不是列表的长度,那么这个意义上的大小是多少?

关于 haskell 错误: Couldn't match expected type `Integer' against inferred type `Int' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2301523/

相关文章:

optimization - 如果我在 Haskell/GHC 中使用未装箱类型(如 Int#),我应该注意哪些事项?

Haskell -- 从具体类型实例中获取 TypeRep

haskell - 这个语句中的类型是如何解析的

c - 使用 float 和整数

bash - 如何使用 expr 测试脚本中的参数是否为数字?

haskell - 具有歧义检测的通用组合

haskell - 实例实现的模式匹配

haskell - 玫瑰树的单子(monad)

haskell - OCaml 中的 haskell TypeError 的等效项

python - 如何循环遍历一个整数并提取另一个较短的整数(从左到右)?