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