1)如何将Int类型转换为Num类型?
以前也有人问过类似的问题,答案是(就像在Haskell wiki上一样)是使用fromIntegral。fromIntegral返回一个Num类型,所以我必须将其转换为我想要的格式。
我需要获取Word16并将其转换为Int64,因此我执行以下操作
let valueLength = (fromIntegral(tagLength) :: Int64)其中,tagLength的类型为Word16
这种方法正确吗?
2)如何安全地处理类型转换?
我来自Java背景,我相信Short,Int和Long都是整数,我可以使用short作为int,但不能反过来。但是在Haskell中,如果我写
256 :: Word8在ghci中,它返回0。
发布于 2013-03-17 22:13:29
我需要获取Word16并将其转换为Int64,因此我执行以下操作:
让valueLength = (fromIntegral(tagLength) ::Int64)
这种方法正确吗?
让我们问问GHC!
Prelude Data.Word Data.Int> :t fromIntegral :: Word16 -> Int64
fromIntegral :: Word16 -> Int64 :: Word16 -> Int64看起来不错。
如何安全地处理类型转换?
Haskell没有类型转换。完全没有。所有的“转换”都必须通过编写一个从一种类型“转换”到另一种类型的函数来完成。
如果我用
ghci编写256 :: Word8,它会返回0。
数字文字是多态的。对于没有小数点的东西,fromInteger是隐式使用的:
Prelude> :t 256
256 :: Num a => a
Prelude> :t fromInteger
fromInteger :: Num a => Integer -> a
Prelude> fromInteger (256 :: Integer) :: Word8
0如果对于单态类型的数值文字有一个警告或其他东西超出了该类型的范围,那就更好了;也许您应该在GHC的bug跟踪器上提交一个特性请求。
https://stackoverflow.com/questions/15461316
复制相似问题