[Haskell-beginners] What's the type of function "abs"?

Zhang Hengruo hengruo.z at gmail.com
Wed Mar 11 14:08:18 UTC 2015


Oh! Thank you very much! I took notice of instances of Num just now... You
two are so kind!

2015-03-11 21:30 GMT+08:00 Daniel P. Wright <dani at dpwright.com>:

> One nice thing about haskell is that the source to most things is
> available on hackage. If you look at abs, here:
>
> https://hackage.haskell.org/package/base-4.7.0.2/docs/src/GHC-Num.html#abs
>
> You will see two things:
>
> 1) abs is actually part of the Num typeclass, so can be defined
> differently for the different numerical types
> 2) the definition for Int is similar to yours:
>
>     abs n  = if n `geInt` 0 then n else negate n
>
>
> Notice `geInt` is just an int-specific (>=) operator. Because we're
> defining an instance we know the concrete type we're dealing with (the type
> is Int -> Int by this point, rather than a -> a), so we don't need to make
> use of Ord in this case.
>
>
>
> 11 Mar 2015 22:21、Zhang Hengruo <hengruo.z at gmail.com> のメッセージ:
>
> I'm a newbie, knowing a little about Haskell, and hope my question isn't
> very silly...
> =====================================================================
> My absolute value function looks like this:
>
> abs2 :: Num a => a -> a
> abs2 n = if n >= 0 then n else 0 - n
>
> GHCi tells me that I should add Ord type class to its definition. Well,
> it's true. It has used relational operators and Num isn't a subclass of Ord.
> However, when I input ":t abs" in GHCi, the interpreter shows "abs :: Num
> a => a -> a". I read GHC/Num.lhs and find that abs is defined as "abs :: a
> -> a" and has no concrete content. So I think the abs function is written
> in C as a module to implement directly and the type of abs just follows its
> class GHC.Num. Is it right? Or there are any other reasons?
>
> Thanks,
>
> Hengruo
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150311/f54d341e/attachment.html>


More information about the Beginners mailing list