Haskell错误:无法将预期类型"Integer"与推断类型"Int"匹配

Fry*_*Fry 5 haskell types integer

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

size :: a -> Integer
size a =  (maxBound::Int) - (minBound::Int)
Run Code Online (Sandbox Code Playgroud)

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

Don*_*art 11

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

fromIntegral :: (Integral a, Num b) => a -> b
Run Code Online (Sandbox Code Playgroud)

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

fromIntegral (maxBound::Int) - fromIntegral (minBound::Int)
Run Code Online (Sandbox Code Playgroud)

但是,我真的不相信你采取的方法 - 它似乎非常脆弱.存在允许环绕的类型的行为是非常可疑的.

你的意思是:"有限Ints列表的大小".如果它不是列表的长度,那么这个意义上的大小是多少?