# [Haskell-cafe] Other instances of Integral

Ryan Ingram ryani.spam at gmail.com
Fri Nov 27 14:36:35 EST 2009

Integer is a type. It has members like 5, -3, and 1095823705763209723486723782.

Int is a type.  5 and -3 can also both be Ints, but that last number
can't be; it's too big.

Word32 is a type.  5 can also be a Word32, but neither of the other
numbers can be (it's an unsigned type so there are no negative
numbers).

All of these are instances of Integral,  The main thing that Integral
requires you to provide is "toInteger"; that is, your type must be a
subset of Integer, because you need to be able to convert it to an
Integer on demand.

If you have a function f :: Integer -> Integer, it's possible to make
it into a function of type (Integral a) => a -> a.  Exercise: write
this function:

liftIntegral :: Integral a => (Integer -> Integer) -> a -> a
liftIntegral f x = ?

"fromInteger" and "toInteger" might be useful to you here.  Of course,
this is likely not as efficient as operating on the argument directly
(using the operations provided by the type classes Eq, Show, Num, Ord,
Real, Enum, and Integral), but it works :)

-- ryan

On 11/2d7/09, Tsunkiet Man <temp.tsun at gmail.com> wrote:
> 2009/11/27 Miguel Mitrofanov <miguelimo38 at yandex.ru>
>
>>
>>
>> Tsunkiet Man wrote:
>>
>>> Hello,
>>>  I would like to ask wheter there are other instances of the class
>>> Integral?
>>>
>>
>> Lots of them. You can define a few of them yourself, you know.
>
>  Yes, I knew that =).
>
>
>>
>> And I would like to ask what the difference is between the following
>>> functions: SomeFunctionA :: (Integral a) => a -> a,
>>>
>>
>> Perfectly correct.
>>
>>
>> SomeFunctionB (Integer a) => a -> a, SomeFunctionC (Int a) => a -> a.
>>>
>>
>> Both incorrect.
>>
>> Integral is a class, but Integer and Int are types.
>>
>>
>> What I do know is, that the Int can have underflow and overflows, however
>> I
>>> don't actually see the difference (and I can't really find a difference
>>> on
>>> Google as it gives me results that aren't really relevant to my question)
>>> between prefering to use an Integral a when I've already got an Integer.
>>>
>>
>> Sorry, didn't understand your question.
>
>  Was not really a question ^_^
>
>
>>
>>> (Assuming I didn't missed the definiton of a Integral, which has by
>>> definition (I looked it up on Google:
>>> instances)
>>>
>>
>> No. It makes no sense to say "by definition ... has that number of
>> instances". Instances of class are not included in it's definition and
>> could
>> be defined separately.
>
>  Ah I see!
>
>
>>
>> Can someone explain to me what kind of advantages and disadvantages I
>> would
>>> get when substituting SomeFunctionB for someFunctionA?
>>>
>>
>> Working program would certainly be an advantage.
>
>
>
>> What if it both works? Should I take the "highest level"?
>>
>  Thank you for your help!
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>>
>> This is actually all related to my homework problem which I can't seem to
> get a usefull answer out. Cause it tells me that a definition with Integrals
> would be much more general. It can support other instances of the class
> Integral. And then it asks me what the difference the definition has,
> actually it has none. Because I only use functions in de Prelude that are
> defined for Integrals.
>
> Correct me if I'm wrong with this =).
>
> I don't really understand how I should answer this homework question as it
> makes no sense in my opinion give me the answer and then asking me the
> question xD.
>
> Thanks for your quick response!
>