polynomial-functor
Safe HaskellNone
LanguageHaskell2010

Data.Functor.Polynomial

Synopsis

Documentation

data Poly (tag :: Type -> Type) x where Source #

Uniformly represented polynomial functor.

Given a HasFinitary tag instance, Poly tag is a polynomial functor. When tag is the inverse images of α :: U -> Type, Poly is isomorphic to:

Poly tag x
 = ∑{n :: Type} (tag n, x^n)
 = ∑{n :: Type} ∑{u :: U, α(u) == n} x^n
 = ∑{u :: U} x^(α(u))

Constructors

P :: forall (tag :: Type -> Type) n x. tag n -> (n -> x) -> Poly tag x 

Instances

Instances details
HasFinitary tag => Foldable (Poly tag) Source # 
Instance details

Defined in Data.Functor.Polynomial

Methods

fold :: Monoid m => Poly tag m -> m #

foldMap :: Monoid m => (a -> m) -> Poly tag a -> m #

foldMap' :: Monoid m => (a -> m) -> Poly tag a -> m #

foldr :: (a -> b -> b) -> b -> Poly tag a -> b #

foldr' :: (a -> b -> b) -> b -> Poly tag a -> b #

foldl :: (b -> a -> b) -> b -> Poly tag a -> b #

foldl' :: (b -> a -> b) -> b -> Poly tag a -> b #

foldr1 :: (a -> a -> a) -> Poly tag a -> a #

foldl1 :: (a -> a -> a) -> Poly tag a -> a #

toList :: Poly tag a -> [a] #

null :: Poly tag a -> Bool #

length :: Poly tag a -> Int #

elem :: Eq a => a -> Poly tag a -> Bool #

maximum :: Ord a => Poly tag a -> a #

minimum :: Ord a => Poly tag a -> a #

sum :: Num a => Poly tag a -> a #

product :: Num a => Poly tag a -> a #

(GEq tag, HasFinitary tag) => Eq1 (Poly tag) Source # 
Instance details

Defined in Data.Functor.Polynomial

Methods

liftEq :: (a -> b -> Bool) -> Poly tag a -> Poly tag b -> Bool #

(GCompare tag, HasFinitary tag) => Ord1 (Poly tag) Source #
  • *Does not preserve** the order through toPoly and fromPoly
Instance details

Defined in Data.Functor.Polynomial

Methods

liftCompare :: (a -> b -> Ordering) -> Poly tag a -> Poly tag b -> Ordering #

HasFinitary tag => Traversable (Poly tag) Source # 
Instance details

Defined in Data.Functor.Polynomial

Methods

traverse :: Applicative f => (a -> f b) -> Poly tag a -> f (Poly tag b) #

sequenceA :: Applicative f => Poly tag (f a) -> f (Poly tag a) #

mapM :: Monad m => (a -> m b) -> Poly tag a -> m (Poly tag b) #

sequence :: Monad m => Poly tag (m a) -> m (Poly tag a) #

Functor (Poly tag) Source # 
Instance details

Defined in Data.Functor.Polynomial

Methods

fmap :: (a -> b) -> Poly tag a -> Poly tag b #

(<$) :: a -> Poly tag b -> Poly tag a #

Polynomial (Poly tag) Source #
fromPoly = toPoly = id
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Poly tag) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Poly tag) = tag

Methods

toPoly :: Poly tag x -> Poly (Tag (Poly tag)) x Source #

fromPoly :: Poly (Tag (Poly tag)) x -> Poly tag x Source #

(Eq x, GEq tag, HasFinitary tag) => Eq (Poly tag x) Source # 
Instance details

Defined in Data.Functor.Polynomial

Methods

(==) :: Poly tag x -> Poly tag x -> Bool #

(/=) :: Poly tag x -> Poly tag x -> Bool #

(Ord x, GCompare tag, HasFinitary tag) => Ord (Poly tag x) Source #
  • *Does not preserve** the order through toPoly and fromPoly
Instance details

Defined in Data.Functor.Polynomial

Methods

compare :: Poly tag x -> Poly tag x -> Ordering #

(<) :: Poly tag x -> Poly tag x -> Bool #

(<=) :: Poly tag x -> Poly tag x -> Bool #

(>) :: Poly tag x -> Poly tag x -> Bool #

(>=) :: Poly tag x -> Poly tag x -> Bool #

max :: Poly tag x -> Poly tag x -> Poly tag x #

min :: Poly tag x -> Poly tag x -> Poly tag x #

type Tag (Poly tag) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Poly tag) = tag