haskell - Haskell 中数字的解释

标签 haskell types numbers typeclass

我想要对 NumRealIntegralIntegerInt 的清晰解释比率有理双倍浮点

最佳答案

这个答案主要假设您知道类型和类型类之间的区别。如果您对这种差异感到模糊,那么 clear up your understanding在继续阅读之前。

数字

Num 是一个包含所有数字类型的类型类。

:info Num
class Num a where
  (+) :: a -> a -> a
  (-) :: a -> a -> a
  (*) :: a -> a -> a
  negate :: a -> a
  abs :: a -> a
  signum :: a -> a
  fromInteger :: Integer -> a
        -- Defined in ‘GHC.Num’
instance Num Word -- Defined in ‘GHC.Num’
instance Num Integer -- Defined in ‘GHC.Num’
instance Num Int -- Defined in ‘GHC.Num’
instance Num Float -- Defined in ‘GHC.Float’
instance Num Double -- Defined in ‘GHC.Float’

真实

也是一个类型类,涵盖了那些可以表示为实际值的类型(Rational 类型)。

:info Real
class (Num a, Ord a) => Real a where
  toRational :: a -> Rational
        -- Defined in ‘GHC.Real’
instance Real Word -- Defined in ‘GHC.Real’
instance Real Integer -- Defined in ‘GHC.Real’
instance Real Int -- Defined in ‘GHC.Real’
instance Real Float -- Defined in ‘GHC.Float’
instance Real Double -- Defined in ‘GHC.Float’

积分

积分的类型类,...,-2,-1,0,1,...。 Integer(又名 big int)、Int、Int64 等类型都是实例。

:info Integral
class (Real a, Enum a) => Integral a where
  quot :: a -> a -> a
  rem :: a -> a -> a
  div :: a -> a -> a
  mod :: a -> a -> a
  quotRem :: a -> a -> (a, a)
  divMod :: a -> a -> (a, a)
  toInteger :: a -> Integer
        -- Defined in ‘GHC.Real’
instance Integral Word -- Defined in ‘GHC.Real’
instance Integral Integer -- Defined in ‘GHC.Real’
instance Integral Int -- Defined in ‘GHC.Real’

整数

可以表示无界整数的类型,而不是我们到目前为止所讨论的类型类。因此 2^3028 是一个合法值。

整数

固定宽度积分。在 GHC 编译器中,这是 32 位或 64 位,具体取决于您的体系结构。 Haskell 语言仅保证该值至少为 29 位。

比率

这是一个类型构造函数,因此您可以使用诸如 Ratio Integer 之类的内容来获取两个整数之比的类型(数学上的 a/b)。

理性

有理数实际上是两个整数的比率,理解比率就很好了:

:i Rational
type Rational = Ratio Integer

double 浮点值的类型。

float

单精度浮点值的类型。

关于haskell - Haskell 中数字的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841767/

相关文章:

haskell - fmap的函数组成

c - 从枚举中重新定义值

types - 什么是 Isabelle/HOL 亚型?哪些 Isar 命令产生子类型?

numbers - 0 乘以 float

math - 是否有可能设计一个接受无理数的自动机?

haskell - 用 GHC 编译成巨大的二进制文件的小型 Haskell 程序

list - Haskell int 列表到字符串

Haskell 不可变数据结构 - Map 数据类型

c++ - Arduino 数组没有命名类型

java - 在 ColdFusion 中获取货币符号 aka localeconv()?