【问题标题】:Haskell: "Cast" / force type?Haskell:“演员”/力量类型?
【发布时间】:2012-01-23 20:27:42
【问题描述】:

我怎么说 Haskell 来将某事解释为一种特殊类型? 例如,我有一个列表,想将其长度除以 2。 所以我写了

(length mylist) / 2

得到这个错误

没有 (Fractional Int) 的实例 由使用`/'引起的

因为我想要一个整数除法,所以我想做length mylist2 和结果Int

【问题讨论】:

  • JFI 在Data.List 中有genericLength 函数。在您的情况下,它不会返回整数答案,但它通常很有用,因为它可以让您避免一些尴尬的 fromIntegral 调用。
  • 需要更多fromIntegral。不过,说真的,fromIntegral 是将 Int “强制转换”为任何实例化 Num 类型类的神奇方式。

标签: haskell types casting


【解决方案1】:

试试div (length my list) 2/ 进行分数除法; div 进行整数除法。

【讨论】:

  • 啊,谢谢。一般怎么做?你总是必须坚持函数类型定义吗?
  • 有些函数允许你从一种类型转换为另一种类型(例如整数到小数),但是是的,Haskell 的本质是,如果类型不适合定义一个函数,你得到一个错误。
【解决方案2】:

这里有两个不同的问题。

  • 整数除法:使用div函数:div (length mylist) 2(length mylist) `div` 2

  • 铸造。人们可以通过写expression :: type 而不仅仅是expression 来告诉Haskell 一个特定的表达式具有特定的类型。但是,这不会对值进行任何“转换”或“转换”。用于在各种数字和字符串类型之间进行转换的一些有用函数是 fromIntegralshowreadrealToFracfromRationaltoRationaltoInteger 等。您可以在 Hoogle 上查找这些内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多