Break `abs` into two aspects
Dannyu NDos
ndospark320 at gmail.com
Wed Jan 29 14:26:11 UTC 2020
@Andrew, it's not clear how you are posing U(R) as "ring of units." It's a
multiplicative group, and is not closed under addition.
2020년 1월 28일 (화) 19:42, Dannyu NDos <ndospark320 at gmail.com>님이 작성:
> This two-step proposal suggests to alter the official Haskell 2010
> standard.
>
> 1. Introduction:
>
> The `Num` typeclass effectively represents a ring. Yet it also has `abs`
> and `signum`. `abs` represents a norm, but its type is wrong:
>
> abs :: a -> a
>
> Mathematically, the return value must be a nonnegative real number. Yet
> there is no guarantee that the type `a` can have that value. This led us to
> have too strong restriction to `instance Num Complex`:
>
> instance RealFloat a => Num (Complex a) where ...
>
> I found a way for `abs` (and `signum`) to have much more mathematical
> place.
>
> 2. Step 1:
>
> First, I suggest to add the following variants of `abs` and `signum`:
>
> realAbs :: Real a => a -> a
> realAbs x = if x >= 0 then x else negate x
> realSignum :: Real a => a -> a
> realSignum x = case compare 0 x of
> LT -> -1
> EQ -> 0
> _ -> 1
>
> These can replace `abs` and `signum` instances for integral and rational
> types.
>
> 3. Step 2:
>
> Second, I suggest to move `abs` and `signum` from `Num` to `Floating`:
>
> class Floating a where
> abs :: a -> a
> signum :: a -> a
> ...
>
> This exploits the fact that `Floating` represents a field with
> characteristic 0, regarding exponential and trigonometric functions are
> defined as Taylor series. The definition of convergence of series is
> defined using norms.
>
> 4. Conclusion:
>
> This enables us to implement rings (Num) and fields (Fractional) without
> concerning about norms. For example, Gaussian integers.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20200129/21c7abfd/attachment.html>
More information about the Libraries
mailing list