2013-03-17 209 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跟蹤器提交功能請求。

相關問題