Safe Haskell | None |
---|---|
Language | Haskell98 |
Low-level interface for the Poly
type.
- data Endianness
- data Poly a
- zero :: Poly a
- poly :: (Num a, Eq a) => Endianness -> [a] -> Poly a
- polyN :: (Num a, Eq a) => Int -> Endianness -> [a] -> Poly a
- unboxedPoly :: (Unbox a, Num a, Eq a) => Endianness -> [a] -> Poly a
- unboxedPolyN :: (Unbox a, Num a, Eq a) => Int -> Endianness -> [a] -> Poly a
- mapPoly :: (Num a, Eq a) => (a -> a) -> Poly a -> Poly a
- rawMapPoly :: (a -> a) -> Poly a -> Poly a
- wrapPoly :: Poly a -> Poly (WrappedNum a)
- unwrapPoly :: Poly (WrappedNum a) -> Poly a
- unboxPoly :: Unbox a => Poly a -> Poly a
- rawListPoly :: Endianness -> [a] -> Poly a
- rawListPolyN :: Int -> Endianness -> [a] -> Poly a
- rawVectorPoly :: Endianness -> Vector a -> Poly a
- rawUVectorPoly :: Unbox a => Endianness -> Vector a -> Poly a
- trim :: (a -> Bool) -> Poly a -> Poly a
- vTrim :: (Eq a, AdditiveGroup a) => Poly a -> Poly a
- polyIsZero :: (Num a, Eq a) => Poly a -> Bool
- polyIsOne :: (Num a, Eq a) => Poly a -> Bool
- polyCoeffs :: (Num a, Eq a) => Endianness -> Poly a -> [a]
- vPolyCoeffs :: (Eq a, AdditiveGroup a) => Endianness -> Poly a -> [a]
- rawCoeffsOrder :: Poly a -> Endianness
- rawPolyCoeffs :: Poly a -> [a]
- untrimmedPolyCoeffs :: Endianness -> Poly a -> [a]
- polyDegree :: (Num a, Eq a) => Poly a -> Int
- rawPolyDegree :: Poly a -> Int
- rawPolyLength :: Poly a -> Int
Documentation
data Endianness Source #
Functor Poly Source # | |
(AdditiveGroup a, Eq a) => Eq (Poly a) Source # | |
Show a => Show (Poly a) Source # | |
NFData a => NFData (Poly a) Source # | |
(Eq a, VectorSpace a, AdditiveGroup (Scalar a), Eq (Scalar a)) => VectorSpace (Poly a) Source # | |
AdditiveGroup a => AdditiveGroup (Poly a) Source # | |
type Scalar (Poly a) Source # | |
poly :: (Num a, Eq a) => Endianness -> [a] -> Poly a Source #
Make a Poly
from a list of coefficients using the specified coefficient order.
polyN :: (Num a, Eq a) => Int -> Endianness -> [a] -> Poly a Source #
Make a Poly
from a list of coefficients, at most n
of which are significant.
unboxedPoly :: (Unbox a, Num a, Eq a) => Endianness -> [a] -> Poly a Source #
unboxedPolyN :: (Unbox a, Num a, Eq a) => Int -> Endianness -> [a] -> Poly a Source #
mapPoly :: (Num a, Eq a) => (a -> a) -> Poly a -> Poly a Source #
Like fmap, but able to preserve unboxedness
rawMapPoly :: (a -> a) -> Poly a -> Poly a Source #
wrapPoly :: Poly a -> Poly (WrappedNum a) Source #
like fmap WrapNum
but using unsafeCoerce
to avoid a pointless traversal
unwrapPoly :: Poly (WrappedNum a) -> Poly a Source #
like fmap unwrapNum
but using unsafeCoerce
to avoid a pointless traversal
rawListPoly :: Endianness -> [a] -> Poly a Source #
rawListPolyN :: Int -> Endianness -> [a] -> Poly a Source #
rawVectorPoly :: Endianness -> Vector a -> Poly a Source #
rawUVectorPoly :: Unbox a => Endianness -> Vector a -> Poly a Source #
trim :: (a -> Bool) -> Poly a -> Poly a Source #
Trim zeroes from a polynomial (given a predicate for identifying zero).
In particular, drops zeroes from the highest-order coefficients, so that
0x^n + 0x^(n-1) + 0x^(n-2) + ... + ax^k + ...
, a /= 0
is normalized to ax^k + ...
.
The Eq
instance for Poly
and all the standard constructors / destructors
are defined using trim (0==)
.
polyCoeffs :: (Num a, Eq a) => Endianness -> Poly a -> [a] Source #
Get the coefficients of a a Poly
in the specified order.
vPolyCoeffs :: (Eq a, AdditiveGroup a) => Endianness -> Poly a -> [a] Source #
Get the coefficients of a a Poly
in the specified order.
rawCoeffsOrder :: Poly a -> Endianness Source #
rawPolyCoeffs :: Poly a -> [a] Source #
untrimmedPolyCoeffs :: Endianness -> Poly a -> [a] Source #
polyDegree :: (Num a, Eq a) => Poly a -> Int Source #
Get the degree of a a Poly
(the highest exponent with nonzero coefficient)
rawPolyDegree :: Poly a -> Int Source #
rawPolyLength :: Poly a -> Int Source #