{-# OPTIONS_GHC -fno-warn-orphans #-}
-- |This module exports a 'Num' instance for the 'Poly' type.
-- This instance does not implement all operations, because 'abs' and 'signum'
-- are simply not definable, so I have placed it into a separate module so
-- that I can make people read this caveat ;).
--
-- Use at your own risk.
module Math.Polynomial.NumInstance where

import Math.Polynomial

instance (Num a, Eq a) => Num (Poly a) where
    fromInteger :: Integer -> Poly a
fromInteger i :: Integer
i = Endianness -> [a] -> Poly a
forall a. (Num a, Eq a) => Endianness -> [a] -> Poly a
poly Endianness
LE [Integer -> a
forall a. Num a => Integer -> a
fromInteger Integer
i]
    + :: Poly a -> Poly a -> Poly a
(+) = Poly a -> Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a -> Poly a
addPoly
    negate :: Poly a -> Poly a
negate = Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a
negatePoly
    * :: Poly a -> Poly a -> Poly a
(*) = Poly a -> Poly a -> Poly a
forall a. (Num a, Eq a) => Poly a -> Poly a -> Poly a
multPoly

    abs :: Poly a -> Poly a
abs     = [Char] -> Poly a -> Poly a
forall a. HasCallStack => [Char] -> a
error    "abs cannot be defined for the Poly type"
    signum :: Poly a -> Poly a
signum  = [Char] -> Poly a -> Poly a
forall a. HasCallStack => [Char] -> a
error "signum cannot be defined for the Poly type"