Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Polynomial.Functor.Deriving
Synopsis
- newtype ViaPolynomial (e :: Poly -> Type -> Type) (f :: Type -> Type) a = ViaPolynomial {
- unwrapViaPolynomial :: f a
- newtype Zippy (p :: Poly) x = Zippy {}
- newtype Aligney (p :: Poly) x = Aligney {
- runAligney :: Ev p x
Documentation
newtype ViaPolynomial (e :: Poly -> Type -> Type) (f :: Type -> Type) a Source #
Generic Deriving
Constructors
ViaPolynomial | |
Fields
|
Instances
newtype Zippy (p :: Poly) x Source #
Any polynomial functor
can have a "zippy" applicative instance.Ev
p
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}
Instances
Foldable (Zippy p) Source # | |
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 # elem :: Eq a => a -> Zippy p a -> Bool # maximum :: Ord a => Zippy p a -> a # minimum :: Ord a => Zippy p a -> a # | |
Traversable (Zippy p) Source # | |
Defined in Data.Polynomial.Functor.Deriving | |
SingI p => Applicative (Zippy p) Source # | |
Functor (Zippy p) Source # | |
Show x => Show (Zippy p x) Source # | |
Eq x => Eq (Zippy p x) Source # | |
Ord x => Ord (Zippy p x) Source # | |
Defined in Data.Polynomial.Functor.Deriving |
newtype Aligney (p :: Poly) x Source #
Any polynomial functor with no constant term,
, can have an "aligney" applicative and monad instance.Ev
(T p)
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
Foldable (Aligney p) Source # | |
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] # 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 # | |
Traversable (Aligney p) Source # | |
Defined in Data.Polynomial.Functor.Deriving | |
SingI p => Applicative (Aligney ('T p)) Source # | |
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 # | |
SingI p => Monad (Aligney ('T p)) Source # | |
Show x => Show (Aligney p x) Source # | |
Eq x => Eq (Aligney p x) Source # | |
Ord x => Ord (Aligney p x) Source # | |
Defined in Data.Polynomial.Functor.Deriving |