【问题标题】:Int type conversionint 类型转换
【发布时间】:2013-03-05 20:58:39
【问题描述】:

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

以前曾提出过类似的问题,答案是(就像在 Haskell wiki 上一样)是使用 fromIntegralfromIntegral 返回 Num 类型,所以我必须将其转换为我想要的格式。

我需要获取Word16 并将其转换为Int64,所以我正在执行以下操作

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

tagLength 的类型为 Word16

这种方法正确吗?

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

来自 Java 背景,我相信 Short,IntLong 我可以使用short 作为int,但反过来不行。如果我写的话,在 Haskell 中

256 :: Word8

ghci 中返回 0。

【问题讨论】:

    标签: haskell types type-conversion


    【解决方案1】:

    我需要使用 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 的错误跟踪器上提交功能请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2016-03-12
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多