我有一个 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/