Alfredo Paz-Valderrama <[EMAIL PROTECTED]>
is confused by / in Haskell.
        1 / 2
        
        I get 0.5 by answer, but the / operator signature is:
        
        float -> float -> float
        
No, it certainly is NOT that.  At the Hugs prompt, type

    :type (/)
and you will see the answer
    (/) :: Fractional a => a -> a -> a

That is, for any type "a" which belongs to the Fractional type-class,
there is a version of (/) which takes two arguments of type "a" and
returns a value of type "a".

        1) Why don't fail?
        
Because the definition of Haskell says it mustn't.
Do read a good tutorial, or textbook, or the report.

        2) 1 and 2 are not integers?
        
Not exactly.  Or more precisely, not _just_ integers.
Again, at the Hugs prompt, type

    :type 1
and you will see the answer
    1 :: Num a => a

That is, for any type "a" which belongs to the Num type-class,
1 can be considered as a member of type "a".

More precisely, it is as if integer literals like 1 and 2 belonged
to the type Integer (unbounded integers) but were always wrapped up
as (fromInteger 1) or (fromInteger 2), where

    fromInteger :: Num a => Integer -> a

converts an unbounded integer to whatever numeric type the context
requires.  A similar rule applies to numeric literals with decimal
points.  Technically those are exact unbounded rational numbers with
fromRational wrapped around them.

        3) can this fact be source of confusions?
        
No.  Quite the opposite, in fact.  Haskell seems to cause much less surprise
with arithmetic than any other typed programming language I know.  This all
relies on typeclasses, which are a fundamental and pervasive part of Haskell.

_______________________________________________
Hugs-Users mailing list
Hugs-Users@haskell.org
http://www.haskell.org/mailman/listinfo/hugs-users

Reply via email to