programa - Explicación de los números en Haskell
programa en haskell (2)
Esta respuesta asume en su mayoría que conoce la diferencia entre tipos y clases de tipos. Si esa diferencia es nebulosa para usted, aclare su comprensión allí antes de seguir leyendo.
Num
Num
es una clase de tipo que incluye todos los tipos numéricos.
: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’
Real
También una clase de tipos que cubre aquellos tipos que pueden representarse como un valor real (el tipo 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’
Integral
Una clase de tipo para integrales, ya sabes, ...,-2,-1,0,1,...
Tipos tales como Integer (también conocido como big int), Int, Int64, etc. son instancias.
: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’
Entero
Un tipo, no una clase de tipo como la que hemos hablado hasta ahora, que puede representar enteros ilimitados. Entonces 2^3028
es un valor legal.
En t
Una integral de ancho fijo. En el compilador GHC esto es 32 o 64 bits dependiendo de su arquitectura. El lenguaje Haskell solo garantiza que tendrá al menos 29 bits.
Proporción
Este es un constructor de tipo, por lo que diría algo como Ratio Integer
para obtener un tipo de proporción de dos enteros (matemáticamente a/b
).
Racional
Bueno, un racional es, literalmente, una proporción de dos enteros, comprender la razón y estás bien:
:i Rational
type Rational = Ratio Integer
Doble
Un tipo para valores de coma flotante de doble precisión.
Flotador
Un tipo para valores de punto flotante de precisión simple.
Me gustaría una explicación clara de Num
, Real
, Integral
, Integer
, Int
, Ratio
, Rational
, Double
, Float
.
Hay una imagen interesante en la documentación de Haskell que muestra las relaciones entre las clases y sus instancias de tipo, que cubre la mayoría de las que usted mencionó:
Con respecto a los números Rational :
Para cada Tipo
Integral
t, existe un tipoRatio
t de pares racionales con componentes de tipo t. El nombre de tipoRational
es un sinónimo deRatio Integer
.