Int类型转换

Cod*_*ace 6 haskell types type-conversion

1)你如何从一种Int类型转换为一种Num类型?

之前已经提出了类似的问题,答案是(就像在Haskell维基上一样)是用的fromIntegral.fromIntegral返回一个Num类型,所以我必须将其转换为我想要的格式.

我需要Word16把它转换成一个Int64所以我正在做以下事情

let valueLength = (fromIntegral(tagLength) :: Int64)
Run Code Online (Sandbox Code Playgroud)

哪里tagLength有类型Word16

这种方法是否正确?

2)如何安全地处理类型转换?

从Java后台那里是整数,我相信未来Short,Int并且Long 我可以使用short作为int而不是周围的其他方式.如果我写的话,在Haskell中

256 :: Word8
Run Code Online (Sandbox Code Playgroud)

ghci它中返回0.

Dan*_*ner 21

我需要使用Word16并将其转换为Int64,所以我正在做以下事情:

let valueLength = (fromIntegral(tagLength) :: Int64)
Run Code Online (Sandbox Code Playgroud)

这种方法是否正确?

我们问GHC吧!

Prelude Data.Word Data.Int> :t fromIntegral :: Word16 -> Int64
fromIntegral :: Word16 -> Int64 :: Word16 -> Int64
Run Code Online (Sandbox Code Playgroud)

看起来不错.

你如何安全地处理类型转换?

Haskell没有类型转换.完全没有.所有"转换"必须通过编写从一种类型"转换"到另一种类型的函数来完成.

如果我256 :: Word8ghci里面写回来0.

数字文字是多态的.对于没有小数点的东西,fromInteger隐式使用:

Prelude> :t 256
256 :: Num a => a
Prelude> :t fromInteger
fromInteger :: Num a => Integer -> a
Prelude> fromInteger (256 :: Integer) :: Word8
0
Run Code Online (Sandbox Code Playgroud)

如果有一个单一类型的数字文字的警告或某些东西超出该类型的范围,那可能会很好; 也许你应该在GHC的bug追踪器上提交功能请求.