polynomial-functor
Safe HaskellNone
LanguageHaskell2010

Data.Functor.Polynomial.Class

Synopsis

Documentation

class Functor f => Polynomial (f :: Type -> Type) where Source #

A class for Functor which can be represented as Poly.

toPoly and fromPoly are isomorphisms.

toPoly . fromPoly = id
fromPoly . toPoly = id

Associated Types

type Tag (f :: Type -> Type) :: Type -> Type Source #

Methods

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

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

Instances

Instances details
Polynomial Identity Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag Identity 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag Identity = TagFn ()
Polynomial Par1 Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag Par1 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag Par1 = TagFn ()

Methods

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

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

Polynomial Maybe Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag Maybe 
Instance details

Defined in Data.Functor.Polynomial.Class

Methods

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

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

Polynomial [] Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag [] 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag [] = TagList

Methods

toPoly :: [x] -> Poly (Tag []) x Source #

fromPoly :: Poly (Tag []) x -> [x] Source #

Polynomial (Either a) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Either a) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Either a) = Tag (Generically1 (Either a))

Methods

toPoly :: Either a x -> Poly (Tag (Either a)) x Source #

fromPoly :: Poly (Tag (Either a)) x -> Either a x Source #

Polynomial (Proxy :: Type -> Type) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Proxy :: Type -> Type) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Proxy :: Type -> Type) = TagFn Void

Methods

toPoly :: Proxy x -> Poly (Tag (Proxy :: Type -> Type)) x Source #

fromPoly :: Poly (Tag (Proxy :: Type -> Type)) x -> Proxy x Source #

Polynomial (U1 :: Type -> Type) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (U1 :: Type -> Type) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (U1 :: Type -> Type) = TagFn Void

Methods

toPoly :: U1 x -> Poly (Tag (U1 :: Type -> Type)) x Source #

fromPoly :: Poly (Tag (U1 :: Type -> Type)) x -> U1 x Source #

Polynomial (V1 :: Type -> Type) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (V1 :: Type -> Type) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (V1 :: Type -> Type) = TagV

Methods

toPoly :: V1 x -> Poly (Tag (V1 :: Type -> Type)) x Source #

fromPoly :: Poly (Tag (V1 :: Type -> Type)) x -> V1 x Source #

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 #

Polynomial ((,) a) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag ((,) a) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag ((,) a) = Tag (Generically1 ((,) a))

Methods

toPoly :: (a, x) -> Poly (Tag ((,) a)) x Source #

fromPoly :: Poly (Tag ((,) a)) x -> (a, x) Source #

Polynomial (Const c :: Type -> Type) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Const c :: Type -> Type) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Const c :: Type -> Type) = TagK c

Methods

toPoly :: Const c x -> Poly (Tag (Const c :: Type -> Type)) x Source #

fromPoly :: Poly (Tag (Const c :: Type -> Type)) x -> Const c x Source #

(Generic1 f, Polynomial (Rep1 f)) => Polynomial (Generically1 f) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Generically1 f) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Generically1 f) = Tag (Rep1 f)
Polynomial f => Polynomial (Rec1 f) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Rec1 f) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Rec1 f) = Tag f

Methods

toPoly :: Rec1 f x -> Poly (Tag (Rec1 f)) x Source #

fromPoly :: Poly (Tag (Rec1 f)) x -> Rec1 f x Source #

(Polynomial f, Polynomial g) => Polynomial (Day f g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Day f g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Day f g) = TagDay (Tag f) (Tag g)

Methods

toPoly :: Day f g x -> Poly (Tag (Day f g)) x Source #

fromPoly :: Poly (Tag (Day f g)) x -> Day f g x Source #

(Polynomial f, Polynomial g) => Polynomial (Product f g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Product f g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Product f g) = TagMul (Tag f) (Tag g)

Methods

toPoly :: Product f g x -> Poly (Tag (Product f g)) x Source #

fromPoly :: Poly (Tag (Product f g)) x -> Product f g x Source #

(Polynomial f, Polynomial g) => Polynomial (Sum f g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Sum f g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Sum f g) = TagSum (Tag f) (Tag g)

Methods

toPoly :: Sum f g x -> Poly (Tag (Sum f g)) x Source #

fromPoly :: Poly (Tag (Sum f g)) x -> Sum f g x Source #

(Polynomial f, Polynomial g) => Polynomial (f :*: g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (f :*: g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (f :*: g) = TagMul (Tag f) (Tag g)

Methods

toPoly :: (f :*: g) x -> Poly (Tag (f :*: g)) x Source #

fromPoly :: Poly (Tag (f :*: g)) x -> (f :*: g) x Source #

(Polynomial f, Polynomial g) => Polynomial (f :+: g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (f :+: g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (f :+: g) = TagSum (Tag f) (Tag g)

Methods

toPoly :: (f :+: g) x -> Poly (Tag (f :+: g)) x Source #

fromPoly :: Poly (Tag (f :+: g)) x -> (f :+: g) x Source #

Polynomial (K1 i c :: Type -> Type) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (K1 i c :: Type -> Type) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (K1 i c :: Type -> Type) = TagK c

Methods

toPoly :: K1 i c x -> Poly (Tag (K1 i c :: Type -> Type)) x Source #

fromPoly :: Poly (Tag (K1 i c :: Type -> Type)) x -> K1 i c x Source #

Polynomial f => Polynomial (Pow n f) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Pow n f) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Pow n f) = TagPow n (Tag f)

Methods

toPoly :: Pow n f x -> Poly (Tag (Pow n f)) x Source #

fromPoly :: Poly (Tag (Pow n f)) x -> Pow n f x Source #

Polynomial f => Polynomial (Pow' n f) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Pow' n f) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Pow' n f) = TagPow' n (Tag f)

Methods

toPoly :: Pow' n f x -> Poly (Tag (Pow' n f)) x Source #

fromPoly :: Poly (Tag (Pow' n f)) x -> Pow' n f x Source #

Polynomial ((->) r) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag ((->) r) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag ((->) r) = (:~:) r

Methods

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

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

(Polynomial f, HasFinitary (Tag f), Polynomial g) => Polynomial (Compose f g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (Compose f g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (Compose f g) = TagComp (Tag f) (Tag g)

Methods

toPoly :: Compose f g x -> Poly (Tag (Compose f g)) x Source #

fromPoly :: Poly (Tag (Compose f g)) x -> Compose f g x Source #

(Polynomial f, HasFinitary (Tag f), Polynomial g) => Polynomial (f :.: g) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (f :.: g) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (f :.: g) = TagComp (Tag f) (Tag g)

Methods

toPoly :: (f :.: g) x -> Poly (Tag (f :.: g)) x Source #

fromPoly :: Poly (Tag (f :.: g)) x -> (f :.: g) x Source #

Polynomial f => Polynomial (M1 i c f) Source # 
Instance details

Defined in Data.Functor.Polynomial.Class

Associated Types

type Tag (M1 i c f) 
Instance details

Defined in Data.Functor.Polynomial.Class

type Tag (M1 i c f) = Tag f

Methods

toPoly :: M1 i c f x -> Poly (Tag (M1 i c f)) x Source #

fromPoly :: Poly (Tag (M1 i c f)) x -> M1 i c f x Source #