我想要对 Num
、Real
、Integral
、Integer
、Int 的清晰解释
、比率
、有理
、双倍
、浮点
。
最佳答案
这个答案主要假设您知道类型和类型类之间的区别。如果您对这种差异感到模糊,那么 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/