
Hello, I´ve a small question about Haskell. It´s really vague explained in "Haskell in 10 minutes" and sometimes it's really detailed explained which is very hard for people who just got into Haskell to read. Can someone explain me something about the type Integral? What exactly is it? I know that 2 is something of the type Integral, however what does this differ from Int? The same question goes for Fractional and Floating, what exactly is their commonality and what exactly is their difference? Thank you for explaining these basic things to me.

Hello,
I´ve a small question about Haskell. It´s really vague explained in "Haskell in 10 minutes" and sometimes it's really detailed explained which is very hard for people who just got into Haskell to read. Can someone explain me something about the type Integral? What exactly is it?
Integral isn't actually a type; it's a type class. Int is a fixed-size type; it's often 32 or 64 bits in practice, but you can't rely on that portably. Int operations are fast. Integer is an unbounded-size type. It's less efficient than Int, for obvious reasons, but it's often more correct because it won't over or underflow. Integral is a class of types that support integer-like operations. If you ask ghci: ePrelude> :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 Integer -- Defined in GHC.Real instance Integral Int -- Defined in GHC.Real Any type for which those operations (quot, rem, div, and so forth) make sense, can be made an instance of class Integral. Int and Integer are two types that are such instances.
I know that 2 is something of the type Integral, however what does this differ from Int? The same question goes for Fractional and Floating, what exactly is their commonality and what exactly is their difference?
Numeric literals are a special case. To make it possible to write "2" and mean it as an Int or an Integer (or any other numeric type), 2 is defined to *really* mean (fromIntegral 2). fromIntegral is a function that takes an Integral value (such as 2), and converts it to a type of your choice, so long as it's a member of the Num class.
Thank you for explaining these basic things to me.
This is one of those areas where Haskell beginners get quickly thrown a handful of things that are unfamiliar (type classes, defaulting, tricky numeric literals), while doing the most basic things (arithmetic). Don't despair; it'll make sense soon if it doesn't yet. Regards, John Dorsey

I know that 2 is something of the type Integral, however what does this differ from Int? The same question goes for Fractional and Floating, what exactly is their commonality and what exactly is their difference?
Numeric literals are a special case. To make it possible to write "2" and mean it as an Int or an Integer (or any other numeric type), 2 is defined to *really* mean (fromIntegral 2). fromIntegral is a function that takes an Integral value (such as 2), and converts it to a type of your choice, so long as it's a member of the Num class.
Ahem. 2 is defined to really mean (fromInteger 2), not "fromIntegral". And "fromInteger" takes an *Integer* value.
participants (3)
-
John Dorsey
-
Miguel Mitrofanov
-
Tsunkiet Man