Tho*_*son 15
这个答案主要假设你知道类型和类型类之间的区别.如果这种差异对你来说是朦胧的,那么在阅读之前要清楚你的理解.
民
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’
Run Code Online (Sandbox Code Playgroud)
真实
还有一个类型类,涵盖那些可以表示为实际值(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’
Run Code Online (Sandbox Code Playgroud)
积分
你知道,积分的类型类...,-2,-1,0,1,....诸如Integer(aka 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’
Run Code Online (Sandbox Code Playgroud)
整数
一个类型,而不是类型类,比如我们到目前为止所讨论的类型,它可以表示无界的整数.这2^3028是一个合法的价值.
诠释
固定宽度积分.在GHC编译器中,这是32位或64位,具体取决于您的体系结构.Haskell语言仅保证至少29位.
比
这是一个类型构造函数,因此您可以说类似于Ratio Integer获得两个整数的比率类型(数学上a/b).
合理的
那么理性就是两个整数的比例,理解比例并且你很好:
:i Rational
type Rational = Ratio Integer
Run Code Online (Sandbox Code Playgroud)
双
双精度浮点值的类型.
浮动
单精度浮点值的类型.
维基教科书中有一个有趣的图像,显示了类及其类型实例之间的关系,涵盖了您提到的大部分内容:
对于有理数,Ratio只是用 构造的一对值:%,对值没有任何类型限制,甚至String允许 s,但一些有用的函数和类型类仅为Ratios定义Integral。并且Rational只是 aRatio的Integers。
data Ratio a = !a :% !a
type Rational = Ratio Integer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3066 次 |
| 最近记录: |