finite-polynomial
Safe HaskellNone
LanguageHaskell2010

Data.Polynomial.Functor.Deriving

Synopsis

Documentation

newtype ViaPolynomial (e :: Poly -> Type -> Type) (f :: Type -> Type) a Source #

Generic Deriving

Constructors

ViaPolynomial 

Fields

Instances

Instances details
(PolynomialFunctor f, p ~ PolyRep f, Coercible e Ev, Applicative (e p)) => Applicative (ViaPolynomial e f) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

pure :: a -> ViaPolynomial e f a #

(<*>) :: ViaPolynomial e f (a -> b) -> ViaPolynomial e f a -> ViaPolynomial e f b #

liftA2 :: (a -> b -> c) -> ViaPolynomial e f a -> ViaPolynomial e f b -> ViaPolynomial e f c #

(*>) :: ViaPolynomial e f a -> ViaPolynomial e f b -> ViaPolynomial e f b #

(<*) :: ViaPolynomial e f a -> ViaPolynomial e f b -> ViaPolynomial e f a #

Functor f => Functor (ViaPolynomial e f) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

fmap :: (a -> b) -> ViaPolynomial e f a -> ViaPolynomial e f b #

(<$) :: a -> ViaPolynomial e f b -> ViaPolynomial e f a #

(PolynomialFunctor f, p ~ PolyRep f, Coercible e Ev, Monad (e p)) => Monad (ViaPolynomial e f) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

(>>=) :: ViaPolynomial e f a -> (a -> ViaPolynomial e f b) -> ViaPolynomial e f b #

(>>) :: ViaPolynomial e f a -> ViaPolynomial e f b -> ViaPolynomial e f b #

return :: a -> ViaPolynomial e f a #

PolynomialFunctor f => PolynomialFunctor (ViaPolynomial e f) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Associated Types

type PolyRep (ViaPolynomial e f) 
Instance details

Defined in Data.Polynomial.Functor.Deriving

type PolyRep (ViaPolynomial e f) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

newtype Zippy (p :: Poly) x Source #

Any polynomial functor Ev p can have a "zippy" applicative instance.

Example

>>> type P = 'S ('T ('S ('T 'U))) -- P(x) = 1 + x + x^2
>>> pure 0 :: Zippy P Int
Zippy {runZippy = Go (0 ::: Go (0 ::: End))}
>>> fx = Zippy $ Go ("A" ::: Go ("a" ::: End)) :: Zippy P String
>>> fy = Zippy $ Go ("B" ::: Stop) :: Zippy P String
>>> fz = Zippy $ Stop :: Zippy P String
>>> (++) <$> fx <*> fy
Zippy {runZippy = Go ("AB" ::: Stop)}
>>> (++) <$> fx <*> fz
Zippy {runZippy = Stop}
>>> (++) <$> fy <*> fz
Zippy {runZippy = Stop}

Constructors

Zippy 

Fields

Instances

Instances details
Foldable (Zippy p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

fold :: Monoid m => Zippy p m -> m #

foldMap :: Monoid m => (a -> m) -> Zippy p a -> m #

foldMap' :: Monoid m => (a -> m) -> Zippy p a -> m #

foldr :: (a -> b -> b) -> b -> Zippy p a -> b #

foldr' :: (a -> b -> b) -> b -> Zippy p a -> b #

foldl :: (b -> a -> b) -> b -> Zippy p a -> b #

foldl' :: (b -> a -> b) -> b -> Zippy p a -> b #

foldr1 :: (a -> a -> a) -> Zippy p a -> a #

foldl1 :: (a -> a -> a) -> Zippy p a -> a #

toList :: Zippy p a -> [a] #

null :: Zippy p a -> Bool #

length :: Zippy p a -> Int #

elem :: Eq a => a -> Zippy p a -> Bool #

maximum :: Ord a => Zippy p a -> a #

minimum :: Ord a => Zippy p a -> a #

sum :: Num a => Zippy p a -> a #

product :: Num a => Zippy p a -> a #

Traversable (Zippy p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

traverse :: Applicative f => (a -> f b) -> Zippy p a -> f (Zippy p b) #

sequenceA :: Applicative f => Zippy p (f a) -> f (Zippy p a) #

mapM :: Monad m => (a -> m b) -> Zippy p a -> m (Zippy p b) #

sequence :: Monad m => Zippy p (m a) -> m (Zippy p a) #

SingI p => Applicative (Zippy p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

pure :: a -> Zippy p a #

(<*>) :: Zippy p (a -> b) -> Zippy p a -> Zippy p b #

liftA2 :: (a -> b -> c) -> Zippy p a -> Zippy p b -> Zippy p c #

(*>) :: Zippy p a -> Zippy p b -> Zippy p b #

(<*) :: Zippy p a -> Zippy p b -> Zippy p a #

Functor (Zippy p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

fmap :: (a -> b) -> Zippy p a -> Zippy p b #

(<$) :: a -> Zippy p b -> Zippy p a #

Show x => Show (Zippy p x) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

showsPrec :: Int -> Zippy p x -> ShowS #

show :: Zippy p x -> String #

showList :: [Zippy p x] -> ShowS #

Eq x => Eq (Zippy p x) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

(==) :: Zippy p x -> Zippy p x -> Bool #

(/=) :: Zippy p x -> Zippy p x -> Bool #

Ord x => Ord (Zippy p x) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

compare :: Zippy p x -> Zippy p x -> Ordering #

(<) :: Zippy p x -> Zippy p x -> Bool #

(<=) :: Zippy p x -> Zippy p x -> Bool #

(>) :: Zippy p x -> Zippy p x -> Bool #

(>=) :: Zippy p x -> Zippy p x -> Bool #

max :: Zippy p x -> Zippy p x -> Zippy p x #

min :: Zippy p x -> Zippy p x -> Zippy p x #

newtype Aligney (p :: Poly) x Source #

Any polynomial functor with no constant term, Ev (T p), can have an "aligney" applicative and monad instance.

Example

>>> type Q = 'T ('S ('T 'U)) -- Q(x) = x + x^2
>>> pure 0 :: Aligney Q Int
Aligney {runAligney = 0 ::: Stop}
>>> fx = Aligney $ "A" ::: Go ("a" ::: End) :: Aligney Q String
>>> fy = Aligney $ "B" ::: Go ("b" ::: End) :: Aligney Q String
>>> fz = Aligney $ "C" ::: Stop :: Aligney Q String
>>> (++) <$> fx <*> fy
Aligney {runAligney = "AB" ::: Go ("ab" ::: End)}
>>> (++) <$> fx <*> fz
Aligney {runAligney = "AC" ::: Go ("aC" ::: End)}
>>> (++) <$> fy <*> fz
Aligney {runAligney = "BC" ::: Go ("bC" ::: End)}
>>> fx >>= \x -> if x == "A" then fz else fy
Aligney {runAligney = "C" ::: Go ("b" ::: End)}

Constructors

Aligney 

Fields

Instances

Instances details
Foldable (Aligney p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

fold :: Monoid m => Aligney p m -> m #

foldMap :: Monoid m => (a -> m) -> Aligney p a -> m #

foldMap' :: Monoid m => (a -> m) -> Aligney p a -> m #

foldr :: (a -> b -> b) -> b -> Aligney p a -> b #

foldr' :: (a -> b -> b) -> b -> Aligney p a -> b #

foldl :: (b -> a -> b) -> b -> Aligney p a -> b #

foldl' :: (b -> a -> b) -> b -> Aligney p a -> b #

foldr1 :: (a -> a -> a) -> Aligney p a -> a #

foldl1 :: (a -> a -> a) -> Aligney p a -> a #

toList :: Aligney p a -> [a] #

null :: Aligney p a -> Bool #

length :: Aligney p a -> Int #

elem :: Eq a => a -> Aligney p a -> Bool #

maximum :: Ord a => Aligney p a -> a #

minimum :: Ord a => Aligney p a -> a #

sum :: Num a => Aligney p a -> a #

product :: Num a => Aligney p a -> a #

Traversable (Aligney p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

traverse :: Applicative f => (a -> f b) -> Aligney p a -> f (Aligney p b) #

sequenceA :: Applicative f => Aligney p (f a) -> f (Aligney p a) #

mapM :: Monad m => (a -> m b) -> Aligney p a -> m (Aligney p b) #

sequence :: Monad m => Aligney p (m a) -> m (Aligney p a) #

SingI p => Applicative (Aligney ('T p)) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

pure :: a -> Aligney ('T p) a #

(<*>) :: Aligney ('T p) (a -> b) -> Aligney ('T p) a -> Aligney ('T p) b #

liftA2 :: (a -> b -> c) -> Aligney ('T p) a -> Aligney ('T p) b -> Aligney ('T p) c #

(*>) :: Aligney ('T p) a -> Aligney ('T p) b -> Aligney ('T p) b #

(<*) :: Aligney ('T p) a -> Aligney ('T p) b -> Aligney ('T p) a #

Functor (Aligney p) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

fmap :: (a -> b) -> Aligney p a -> Aligney p b #

(<$) :: a -> Aligney p b -> Aligney p a #

SingI p => Monad (Aligney ('T p)) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

(>>=) :: Aligney ('T p) a -> (a -> Aligney ('T p) b) -> Aligney ('T p) b #

(>>) :: Aligney ('T p) a -> Aligney ('T p) b -> Aligney ('T p) b #

return :: a -> Aligney ('T p) a #

Show x => Show (Aligney p x) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

showsPrec :: Int -> Aligney p x -> ShowS #

show :: Aligney p x -> String #

showList :: [Aligney p x] -> ShowS #

Eq x => Eq (Aligney p x) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

(==) :: Aligney p x -> Aligney p x -> Bool #

(/=) :: Aligney p x -> Aligney p x -> Bool #

Ord x => Ord (Aligney p x) Source # 
Instance details

Defined in Data.Polynomial.Functor.Deriving

Methods

compare :: Aligney p x -> Aligney p x -> Ordering #

(<) :: Aligney p x -> Aligney p x -> Bool #

(<=) :: Aligney p x -> Aligney p x -> Bool #

(>) :: Aligney p x -> Aligney p x -> Bool #

(>=) :: Aligney p x -> Aligney p x -> Bool #

max :: Aligney p x -> Aligney p x -> Aligney p x #

min :: Aligney p x -> Aligney p x -> Aligney p x #