2013-03-17 207 views
6

1)如何将一个Int类型转换为Num类型?Int类型转换

之前已经提出过类似的问题,并且答案已经(如在Haskell wiki上)是使用fromIntegralfromIntegral返回一个Num类型,所以我必须将其转换为我所需的格式。

我需要一个Word16并将其转换为一个Int64所以我做了以下

let valueLength = (fromIntegral(tagLength) :: Int64) 

其中tagLength已键入Word16

是这种做法是否正确?

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

从Java后台那里是整数,我相信ShortIntLong 我可以用一个shortint而不是周围的其他方法来了。在Haskell但如果我写

256 :: Word8 

ghci返回0

回答

20

我需要一个WORD16并将其转换为一个Int64的,所以我做了以下内容:

let 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跟踪器提交功能请求。

相关问题