{-# LANGUAGE CPP #-}
{-# LANGUAGE PatternSynonyms #-}
module Data.Poly.Semiring
( Poly
, VPoly
, UPoly
, unPoly
, leading
, toPoly
, monomial
, scale
, pattern X
, eval
, deriv
#if MIN_VERSION_semirings(0,4,2)
, PolyOverFractional(..)
#endif
) where
import Data.Semiring (Semiring)
import qualified Data.Vector.Generic as G
import Data.Poly.Internal.Dense (Poly(..), VPoly, UPoly, leading)
import qualified Data.Poly.Internal.Dense as Dense
#if MIN_VERSION_semirings(0,4,2)
import Data.Poly.Internal.Dense.Fractional ()
import Data.Poly.Internal.Dense.GcdDomain ()
import Data.Poly.Internal.PolyOverFractional
#endif
toPoly :: (Eq a, Semiring a, G.Vector v a) => v a -> Poly v a
toPoly = Dense.toPoly'
monomial :: (Eq a, Semiring a, G.Vector v a) => Word -> a -> Poly v a
monomial = Dense.monomial'
scale :: (Eq a, Semiring a, G.Vector v a) => Word -> a -> Poly v a -> Poly v a
scale = Dense.scale'
pattern X :: (Eq a, Semiring a, G.Vector v a, Eq (v a)) => Poly v a
pattern X = Dense.X'
eval :: (Semiring a, G.Vector v a) => Poly v a -> a -> a
eval = Dense.eval'
deriv :: (Eq a, Semiring a, G.Vector v a) => Poly v a -> Poly v a
deriv = Dense.deriv'