kind-generics-0.5.0.0: Generic programming in GHC style for arbitrary kinds and GADTs.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Generics.Kind

Description

Main module of kind-generics. Please refer to the README file for documentation on how to use this package.

Synopsis

Generic representation types

data ((f :: k -> Type) :+: (g :: k -> Type)) (p :: k) infixr 5 #

Sums: encode choice between constructors

Constructors

L1 (f p) 
R1 (g p) 

Instances

Instances details
(SubstRep' f x xs, SubstRep' g x xs) => SubstRep' (f :+: g :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (f :+: g) x :: LoT k -> Type Source #

Methods

substRep :: (f :+: g) (x ':&&: xs) -> SubstRep (f :+: g) x xs

unsubstRep :: SubstRep (f :+: g) x xs -> (f :+: g) (x ':&&: xs)

Generic1 (f :+: g :: k -> Type) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep1 (f :+: g) :: k -> Type #

Methods

from1 :: forall (a :: k0). (f :+: g) a -> Rep1 (f :+: g) a #

to1 :: forall (a :: k0). Rep1 (f :+: g) a -> (f :+: g) a #

(Conv f f' tys, Conv g g' tys) => Conv (f :+: g) (f' :+: g' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (f' :+: g') tys -> (f :+: g) a Source #

toKindGenerics :: (f :+: g) a -> (f' :+: g') tys Source #

(Foldable f, Foldable g) => Foldable (f :+: g)

Since: base-4.9.0.0

Instance details

Defined in Data.Foldable

Methods

fold :: Monoid m => (f :+: g) m -> m #

foldMap :: Monoid m => (a -> m) -> (f :+: g) a -> m #

foldMap' :: Monoid m => (a -> m) -> (f :+: g) a -> m #

foldr :: (a -> b -> b) -> b -> (f :+: g) a -> b #

foldr' :: (a -> b -> b) -> b -> (f :+: g) a -> b #

foldl :: (b -> a -> b) -> b -> (f :+: g) a -> b #

foldl' :: (b -> a -> b) -> b -> (f :+: g) a -> b #

foldr1 :: (a -> a -> a) -> (f :+: g) a -> a #

foldl1 :: (a -> a -> a) -> (f :+: g) a -> a #

toList :: (f :+: g) a -> [a] #

null :: (f :+: g) a -> Bool #

length :: (f :+: g) a -> Int #

elem :: Eq a => a -> (f :+: g) a -> Bool #

maximum :: Ord a => (f :+: g) a -> a #

minimum :: Ord a => (f :+: g) a -> a #

sum :: Num a => (f :+: g) a -> a #

product :: Num a => (f :+: g) a -> a #

(Traversable f, Traversable g) => Traversable (f :+: g)

Since: base-4.9.0.0

Instance details

Defined in Data.Traversable

Methods

traverse :: Applicative f0 => (a -> f0 b) -> (f :+: g) a -> f0 ((f :+: g) b) #

sequenceA :: Applicative f0 => (f :+: g) (f0 a) -> f0 ((f :+: g) a) #

mapM :: Monad m => (a -> m b) -> (f :+: g) a -> m ((f :+: g) b) #

sequence :: Monad m => (f :+: g) (m a) -> m ((f :+: g) a) #

(Functor f, Functor g) => Functor (f :+: g)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

fmap :: (a -> b) -> (f :+: g) a -> (f :+: g) b #

(<$) :: a -> (f :+: g) b -> (f :+: g) a #

Generic ((f :+: g) p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep ((f :+: g) p) :: Type -> Type #

Methods

from :: (f :+: g) p -> Rep ((f :+: g) p) x #

to :: Rep ((f :+: g) p) x -> (f :+: g) p #

(Read (f p), Read (g p)) => Read ((f :+: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

readsPrec :: Int -> ReadS ((f :+: g) p) #

readList :: ReadS [(f :+: g) p] #

readPrec :: ReadPrec ((f :+: g) p) #

readListPrec :: ReadPrec [(f :+: g) p] #

(Show (f p), Show (g p)) => Show ((f :+: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

showsPrec :: Int -> (f :+: g) p -> ShowS #

show :: (f :+: g) p -> String #

showList :: [(f :+: g) p] -> ShowS #

(Eq (f p), Eq (g p)) => Eq ((f :+: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

(==) :: (f :+: g) p -> (f :+: g) p -> Bool #

(/=) :: (f :+: g) p -> (f :+: g) p -> Bool #

(Ord (f p), Ord (g p)) => Ord ((f :+: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

compare :: (f :+: g) p -> (f :+: g) p -> Ordering #

(<) :: (f :+: g) p -> (f :+: g) p -> Bool #

(<=) :: (f :+: g) p -> (f :+: g) p -> Bool #

(>) :: (f :+: g) p -> (f :+: g) p -> Bool #

(>=) :: (f :+: g) p -> (f :+: g) p -> Bool #

max :: (f :+: g) p -> (f :+: g) p -> (f :+: g) p #

min :: (f :+: g) p -> (f :+: g) p -> (f :+: g) p #

type SubstRep (f :+: g :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (f :+: g :: LoT (t -> k) -> Type) (x :: t) = SubstRep f x :+: SubstRep g x
type Rep1 (f :+: g :: k -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

type Rep ((f :+: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

data ((f :: k -> Type) :*: (g :: k -> Type)) (p :: k) infixr 6 #

Products: encode multiple arguments to constructors

Constructors

(f p) :*: (g p) infixr 6 

Instances

Instances details
(SubstRep' f x xs, SubstRep' g x xs) => SubstRep' (f :*: g :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (f :*: g) x :: LoT k -> Type Source #

Methods

substRep :: (f :*: g) (x ':&&: xs) -> SubstRep (f :*: g) x xs

unsubstRep :: SubstRep (f :*: g) x xs -> (f :*: g) (x ':&&: xs)

Generic1 (f :*: g :: k -> Type) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep1 (f :*: g) :: k -> Type #

Methods

from1 :: forall (a :: k0). (f :*: g) a -> Rep1 (f :*: g) a #

to1 :: forall (a :: k0). Rep1 (f :*: g) a -> (f :*: g) a #

(Conv f f' tys, Conv g g' tys) => Conv (f :*: g) (f' :*: g' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (f' :*: g') tys -> (f :*: g) a Source #

toKindGenerics :: (f :*: g) a -> (f' :*: g') tys Source #

(Foldable f, Foldable g) => Foldable (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in Data.Foldable

Methods

fold :: Monoid m => (f :*: g) m -> m #

foldMap :: Monoid m => (a -> m) -> (f :*: g) a -> m #

foldMap' :: Monoid m => (a -> m) -> (f :*: g) a -> m #

foldr :: (a -> b -> b) -> b -> (f :*: g) a -> b #

foldr' :: (a -> b -> b) -> b -> (f :*: g) a -> b #

foldl :: (b -> a -> b) -> b -> (f :*: g) a -> b #

foldl' :: (b -> a -> b) -> b -> (f :*: g) a -> b #

foldr1 :: (a -> a -> a) -> (f :*: g) a -> a #

foldl1 :: (a -> a -> a) -> (f :*: g) a -> a #

toList :: (f :*: g) a -> [a] #

null :: (f :*: g) a -> Bool #

length :: (f :*: g) a -> Int #

elem :: Eq a => a -> (f :*: g) a -> Bool #

maximum :: Ord a => (f :*: g) a -> a #

minimum :: Ord a => (f :*: g) a -> a #

sum :: Num a => (f :*: g) a -> a #

product :: Num a => (f :*: g) a -> a #

(Traversable f, Traversable g) => Traversable (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in Data.Traversable

Methods

traverse :: Applicative f0 => (a -> f0 b) -> (f :*: g) a -> f0 ((f :*: g) b) #

sequenceA :: Applicative f0 => (f :*: g) (f0 a) -> f0 ((f :*: g) a) #

mapM :: Monad m => (a -> m b) -> (f :*: g) a -> m ((f :*: g) b) #

sequence :: Monad m => (f :*: g) (m a) -> m ((f :*: g) a) #

(Alternative f, Alternative g) => Alternative (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

empty :: (f :*: g) a #

(<|>) :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a #

some :: (f :*: g) a -> (f :*: g) [a] #

many :: (f :*: g) a -> (f :*: g) [a] #

(Applicative f, Applicative g) => Applicative (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

pure :: a -> (f :*: g) a #

(<*>) :: (f :*: g) (a -> b) -> (f :*: g) a -> (f :*: g) b #

liftA2 :: (a -> b -> c) -> (f :*: g) a -> (f :*: g) b -> (f :*: g) c #

(*>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b #

(<*) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) a #

(Functor f, Functor g) => Functor (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

fmap :: (a -> b) -> (f :*: g) a -> (f :*: g) b #

(<$) :: a -> (f :*: g) b -> (f :*: g) a #

(Monad f, Monad g) => Monad (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

(>>=) :: (f :*: g) a -> (a -> (f :*: g) b) -> (f :*: g) b #

(>>) :: (f :*: g) a -> (f :*: g) b -> (f :*: g) b #

return :: a -> (f :*: g) a #

(MonadPlus f, MonadPlus g) => MonadPlus (f :*: g)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

mzero :: (f :*: g) a #

mplus :: (f :*: g) a -> (f :*: g) a -> (f :*: g) a #

(Monoid (f p), Monoid (g p)) => Monoid ((f :*: g) p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

mempty :: (f :*: g) p #

mappend :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

mconcat :: [(f :*: g) p] -> (f :*: g) p #

(Semigroup (f p), Semigroup (g p)) => Semigroup ((f :*: g) p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

(<>) :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

sconcat :: NonEmpty ((f :*: g) p) -> (f :*: g) p #

stimes :: Integral b => b -> (f :*: g) p -> (f :*: g) p #

Generic ((f :*: g) p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep ((f :*: g) p) :: Type -> Type #

Methods

from :: (f :*: g) p -> Rep ((f :*: g) p) x #

to :: Rep ((f :*: g) p) x -> (f :*: g) p #

(Read (f p), Read (g p)) => Read ((f :*: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

readsPrec :: Int -> ReadS ((f :*: g) p) #

readList :: ReadS [(f :*: g) p] #

readPrec :: ReadPrec ((f :*: g) p) #

readListPrec :: ReadPrec [(f :*: g) p] #

(Show (f p), Show (g p)) => Show ((f :*: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

showsPrec :: Int -> (f :*: g) p -> ShowS #

show :: (f :*: g) p -> String #

showList :: [(f :*: g) p] -> ShowS #

(Eq (f p), Eq (g p)) => Eq ((f :*: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

(==) :: (f :*: g) p -> (f :*: g) p -> Bool #

(/=) :: (f :*: g) p -> (f :*: g) p -> Bool #

(Ord (f p), Ord (g p)) => Ord ((f :*: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

compare :: (f :*: g) p -> (f :*: g) p -> Ordering #

(<) :: (f :*: g) p -> (f :*: g) p -> Bool #

(<=) :: (f :*: g) p -> (f :*: g) p -> Bool #

(>) :: (f :*: g) p -> (f :*: g) p -> Bool #

(>=) :: (f :*: g) p -> (f :*: g) p -> Bool #

max :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

min :: (f :*: g) p -> (f :*: g) p -> (f :*: g) p #

type SubstRep (f :*: g :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (f :*: g :: LoT (t -> k) -> Type) (x :: t) = SubstRep f x :*: SubstRep g x
type Rep1 (f :*: g :: k -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

type Rep ((f :*: g) p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

data V1 (p :: k) #

Void: used for datatypes without constructors

Instances

Instances details
Generic1 (V1 :: k -> Type) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep1 V1 :: k -> Type #

Methods

from1 :: forall (a :: k0). V1 a -> Rep1 V1 a #

to1 :: forall (a :: k0). Rep1 V1 a -> V1 a #

Foldable (V1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in Data.Foldable

Methods

fold :: Monoid m => V1 m -> m #

foldMap :: Monoid m => (a -> m) -> V1 a -> m #

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

foldr :: (a -> b -> b) -> b -> V1 a -> b #

foldr' :: (a -> b -> b) -> b -> V1 a -> b #

foldl :: (b -> a -> b) -> b -> V1 a -> b #

foldl' :: (b -> a -> b) -> b -> V1 a -> b #

foldr1 :: (a -> a -> a) -> V1 a -> a #

foldl1 :: (a -> a -> a) -> V1 a -> a #

toList :: V1 a -> [a] #

null :: V1 a -> Bool #

length :: V1 a -> Int #

elem :: Eq a => a -> V1 a -> Bool #

maximum :: Ord a => V1 a -> a #

minimum :: Ord a => V1 a -> a #

sum :: Num a => V1 a -> a #

product :: Num a => V1 a -> a #

Traversable (V1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in Data.Traversable

Methods

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

sequenceA :: Applicative f => V1 (f a) -> f (V1 a) #

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

sequence :: Monad m => V1 (m a) -> m (V1 a) #

Functor (V1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

fmap :: (a -> b) -> V1 a -> V1 b #

(<$) :: a -> V1 b -> V1 a #

Semigroup (V1 p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

(<>) :: V1 p -> V1 p -> V1 p #

sconcat :: NonEmpty (V1 p) -> V1 p #

stimes :: Integral b => b -> V1 p -> V1 p #

Generic (V1 p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (V1 p) :: Type -> Type #

Methods

from :: V1 p -> Rep (V1 p) x #

to :: Rep (V1 p) x -> V1 p #

Read (V1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Show (V1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

showsPrec :: Int -> V1 p -> ShowS #

show :: V1 p -> String #

showList :: [V1 p] -> ShowS #

Eq (V1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

(==) :: V1 p -> V1 p -> Bool #

(/=) :: V1 p -> V1 p -> Bool #

Ord (V1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

compare :: V1 p -> V1 p -> Ordering #

(<) :: V1 p -> V1 p -> Bool #

(<=) :: V1 p -> V1 p -> Bool #

(>) :: V1 p -> V1 p -> Bool #

(>=) :: V1 p -> V1 p -> Bool #

max :: V1 p -> V1 p -> V1 p #

min :: V1 p -> V1 p -> V1 p #

type Rep1 (V1 :: k -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

type Rep1 (V1 :: k -> Type) = D1 ('MetaData "V1" "GHC.Generics" "base" 'False) (V1 :: k -> Type)
type Rep (V1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

type Rep (V1 p) = D1 ('MetaData "V1" "GHC.Generics" "base" 'False) (V1 :: Type -> Type)

data U1 (p :: k) #

Unit: used for constructors without arguments

Constructors

U1 

Instances

Instances details
SubstRep' (U1 :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep U1 x :: LoT k -> Type Source #

Methods

substRep :: U1 (x ':&&: xs) -> SubstRep U1 x xs

unsubstRep :: SubstRep U1 x xs -> U1 (x ':&&: xs)

Generic1 (U1 :: k -> Type) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep1 U1 :: k -> Type #

Methods

from1 :: forall (a :: k0). U1 a -> Rep1 U1 a #

to1 :: forall (a :: k0). Rep1 U1 a -> U1 a #

Conv (U1 :: Type -> Type) (U1 :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: U1 tys -> U1 a Source #

toKindGenerics :: U1 a -> U1 tys Source #

Foldable (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in Data.Foldable

Methods

fold :: Monoid m => U1 m -> m #

foldMap :: Monoid m => (a -> m) -> U1 a -> m #

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

foldr :: (a -> b -> b) -> b -> U1 a -> b #

foldr' :: (a -> b -> b) -> b -> U1 a -> b #

foldl :: (b -> a -> b) -> b -> U1 a -> b #

foldl' :: (b -> a -> b) -> b -> U1 a -> b #

foldr1 :: (a -> a -> a) -> U1 a -> a #

foldl1 :: (a -> a -> a) -> U1 a -> a #

toList :: U1 a -> [a] #

null :: U1 a -> Bool #

length :: U1 a -> Int #

elem :: Eq a => a -> U1 a -> Bool #

maximum :: Ord a => U1 a -> a #

minimum :: Ord a => U1 a -> a #

sum :: Num a => U1 a -> a #

product :: Num a => U1 a -> a #

Traversable (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in Data.Traversable

Methods

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

sequenceA :: Applicative f => U1 (f a) -> f (U1 a) #

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

sequence :: Monad m => U1 (m a) -> m (U1 a) #

Alternative (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

empty :: U1 a #

(<|>) :: U1 a -> U1 a -> U1 a #

some :: U1 a -> U1 [a] #

many :: U1 a -> U1 [a] #

Applicative (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

pure :: a -> U1 a #

(<*>) :: U1 (a -> b) -> U1 a -> U1 b #

liftA2 :: (a -> b -> c) -> U1 a -> U1 b -> U1 c #

(*>) :: U1 a -> U1 b -> U1 b #

(<*) :: U1 a -> U1 b -> U1 a #

Functor (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

fmap :: (a -> b) -> U1 a -> U1 b #

(<$) :: a -> U1 b -> U1 a #

Monad (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

(>>=) :: U1 a -> (a -> U1 b) -> U1 b #

(>>) :: U1 a -> U1 b -> U1 b #

return :: a -> U1 a #

MonadPlus (U1 :: Type -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

mzero :: U1 a #

mplus :: U1 a -> U1 a -> U1 a #

Monoid (U1 p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

mempty :: U1 p #

mappend :: U1 p -> U1 p -> U1 p #

mconcat :: [U1 p] -> U1 p #

Semigroup (U1 p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

(<>) :: U1 p -> U1 p -> U1 p #

sconcat :: NonEmpty (U1 p) -> U1 p #

stimes :: Integral b => b -> U1 p -> U1 p #

Generic (U1 p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (U1 p) :: Type -> Type #

Methods

from :: U1 p -> Rep (U1 p) x #

to :: Rep (U1 p) x -> U1 p #

Read (U1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Show (U1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

showsPrec :: Int -> U1 p -> ShowS #

show :: U1 p -> String #

showList :: [U1 p] -> ShowS #

Eq (U1 p)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

(==) :: U1 p -> U1 p -> Bool #

(/=) :: U1 p -> U1 p -> Bool #

Ord (U1 p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

compare :: U1 p -> U1 p -> Ordering #

(<) :: U1 p -> U1 p -> Bool #

(<=) :: U1 p -> U1 p -> Bool #

(>) :: U1 p -> U1 p -> Bool #

(>=) :: U1 p -> U1 p -> Bool #

max :: U1 p -> U1 p -> U1 p #

min :: U1 p -> U1 p -> U1 p #

type SubstRep (U1 :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (U1 :: LoT (t -> k) -> Type) (x :: t) = U1 :: LoT k -> Type
type Rep1 (U1 :: k -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

type Rep1 (U1 :: k -> Type) = D1 ('MetaData "U1" "GHC.Generics" "base" 'False) (C1 ('MetaCons "U1" 'PrefixI 'False) (U1 :: k -> Type))
type Rep (U1 p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

type Rep (U1 p) = D1 ('MetaData "U1" "GHC.Generics" "base" 'False) (C1 ('MetaCons "U1" 'PrefixI 'False) (U1 :: Type -> Type))

newtype M1 i (c :: Meta) (f :: k -> Type) (p :: k) #

Meta-information (constructor names, etc.)

Constructors

M1 

Fields

Instances

Instances details
SubstRep' f x xs => SubstRep' (M1 i c f :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (M1 i c f) x :: LoT k -> Type Source #

Methods

substRep :: M1 i c f (x ':&&: xs) -> SubstRep (M1 i c f) x xs

unsubstRep :: SubstRep (M1 i c f) x xs -> M1 i c f (x ':&&: xs)

Generic1 (M1 i c f :: k -> Type) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep1 (M1 i c f) :: k -> Type #

Methods

from1 :: forall (a :: k0). M1 i c f a -> Rep1 (M1 i c f) a #

to1 :: forall (a :: k0). Rep1 (M1 i c f) a -> M1 i c f a #

Conv f f' tys => Conv (M1 i c f) (f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: f' tys -> M1 i c f a Source #

toKindGenerics :: M1 i c f a -> f' tys Source #

Conv f f' tys => Conv (M1 i c f) (M1 i c f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: M1 i c f' tys -> M1 i c f a Source #

toKindGenerics :: M1 i c f a -> M1 i c f' tys Source #

Foldable f => Foldable (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in Data.Foldable

Methods

fold :: Monoid m => M1 i c f m -> m #

foldMap :: Monoid m => (a -> m) -> M1 i c f a -> m #

foldMap' :: Monoid m => (a -> m) -> M1 i c f a -> m #

foldr :: (a -> b -> b) -> b -> M1 i c f a -> b #

foldr' :: (a -> b -> b) -> b -> M1 i c f a -> b #

foldl :: (b -> a -> b) -> b -> M1 i c f a -> b #

foldl' :: (b -> a -> b) -> b -> M1 i c f a -> b #

foldr1 :: (a -> a -> a) -> M1 i c f a -> a #

foldl1 :: (a -> a -> a) -> M1 i c f a -> a #

toList :: M1 i c f a -> [a] #

null :: M1 i c f a -> Bool #

length :: M1 i c f a -> Int #

elem :: Eq a => a -> M1 i c f a -> Bool #

maximum :: Ord a => M1 i c f a -> a #

minimum :: Ord a => M1 i c f a -> a #

sum :: Num a => M1 i c f a -> a #

product :: Num a => M1 i c f a -> a #

Traversable f => Traversable (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in Data.Traversable

Methods

traverse :: Applicative f0 => (a -> f0 b) -> M1 i c f a -> f0 (M1 i c f b) #

sequenceA :: Applicative f0 => M1 i c f (f0 a) -> f0 (M1 i c f a) #

mapM :: Monad m => (a -> m b) -> M1 i c f a -> m (M1 i c f b) #

sequence :: Monad m => M1 i c f (m a) -> m (M1 i c f a) #

Alternative f => Alternative (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

empty :: M1 i c f a #

(<|>) :: M1 i c f a -> M1 i c f a -> M1 i c f a #

some :: M1 i c f a -> M1 i c f [a] #

many :: M1 i c f a -> M1 i c f [a] #

Applicative f => Applicative (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

pure :: a -> M1 i c f a #

(<*>) :: M1 i c f (a -> b) -> M1 i c f a -> M1 i c f b #

liftA2 :: (a -> b -> c0) -> M1 i c f a -> M1 i c f b -> M1 i c f c0 #

(*>) :: M1 i c f a -> M1 i c f b -> M1 i c f b #

(<*) :: M1 i c f a -> M1 i c f b -> M1 i c f a #

Functor f => Functor (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

fmap :: (a -> b) -> M1 i c f a -> M1 i c f b #

(<$) :: a -> M1 i c f b -> M1 i c f a #

Monad f => Monad (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

(>>=) :: M1 i c f a -> (a -> M1 i c f b) -> M1 i c f b #

(>>) :: M1 i c f a -> M1 i c f b -> M1 i c f b #

return :: a -> M1 i c f a #

MonadPlus f => MonadPlus (M1 i c f)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

Methods

mzero :: M1 i c f a #

mplus :: M1 i c f a -> M1 i c f a -> M1 i c f a #

Monoid (f p) => Monoid (M1 i c f p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

mempty :: M1 i c f p #

mappend :: M1 i c f p -> M1 i c f p -> M1 i c f p #

mconcat :: [M1 i c f p] -> M1 i c f p #

Semigroup (f p) => Semigroup (M1 i c f p)

Since: base-4.12.0.0

Instance details

Defined in GHC.Generics

Methods

(<>) :: M1 i c f p -> M1 i c f p -> M1 i c f p #

sconcat :: NonEmpty (M1 i c f p) -> M1 i c f p #

stimes :: Integral b => b -> M1 i c f p -> M1 i c f p #

Generic (M1 i c f p) 
Instance details

Defined in GHC.Generics

Associated Types

type Rep (M1 i c f p) :: Type -> Type #

Methods

from :: M1 i c f p -> Rep (M1 i c f p) x #

to :: Rep (M1 i c f p) x -> M1 i c f p #

Read (f p) => Read (M1 i c f p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

readsPrec :: Int -> ReadS (M1 i c f p) #

readList :: ReadS [M1 i c f p] #

readPrec :: ReadPrec (M1 i c f p) #

readListPrec :: ReadPrec [M1 i c f p] #

Show (f p) => Show (M1 i c f p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

showsPrec :: Int -> M1 i c f p -> ShowS #

show :: M1 i c f p -> String #

showList :: [M1 i c f p] -> ShowS #

Eq (f p) => Eq (M1 i c f p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

(==) :: M1 i c f p -> M1 i c f p -> Bool #

(/=) :: M1 i c f p -> M1 i c f p -> Bool #

Ord (f p) => Ord (M1 i c f p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

Methods

compare :: M1 i c f p -> M1 i c f p -> Ordering #

(<) :: M1 i c f p -> M1 i c f p -> Bool #

(<=) :: M1 i c f p -> M1 i c f p -> Bool #

(>) :: M1 i c f p -> M1 i c f p -> Bool #

(>=) :: M1 i c f p -> M1 i c f p -> Bool #

max :: M1 i c f p -> M1 i c f p -> M1 i c f p #

min :: M1 i c f p -> M1 i c f p -> M1 i c f p #

type SubstRep (M1 i c f :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (M1 i c f :: LoT (t -> k) -> Type) (x :: t) = M1 i c (SubstRep f x)
type Rep1 (M1 i c f :: k -> Type)

Since: base-4.9.0.0

Instance details

Defined in GHC.Generics

type Rep1 (M1 i c f :: k -> Type) = D1 ('MetaData "M1" "GHC.Generics" "base" 'True) (C1 ('MetaCons "M1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unM1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec1 f)))
type Rep (M1 i c f p)

Since: base-4.7.0.0

Instance details

Defined in GHC.Generics

type Rep (M1 i c f p) = D1 ('MetaData "M1" "GHC.Generics" "base" 'True) (C1 ('MetaCons "M1" 'PrefixI 'True) (S1 ('MetaSel ('Just "unM1") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (f p))))

newtype Field (t :: Atom d Type) (x :: LoT d) where Source #

Fields: used to represent each of the (visible) arguments to a constructor. Replaces the K1 type from Generics. The type of the field is represented by an Atom from Atom.

instance GenericK [] (a :&&: LoT0) where
  type RepK [] = Field Var0 :*: Field ([] :$: Var0)

Constructors

Field 

Fields

Instances

Instances details
Interpret (SubstAtom t2 x) xs ~ Interpret t2 (x ':&&: xs) => SubstRep' (Field t2 :: LoT (t1 -> k) -> Type) (x :: t1) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (Field t2) x :: LoT k -> Type Source #

Methods

substRep :: Field t2 (x ':&&: xs) -> SubstRep (Field t2) x xs

unsubstRep :: SubstRep (Field t2) x xs -> Field t2 (x ':&&: xs)

k ~ Interpret t tys => Conv (K1 p k :: Type -> Type) (Field t :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: Field t tys -> K1 p k a Source #

toKindGenerics :: K1 p k a -> Field t tys Source #

Monoid (Interpret t x) => Monoid (Field t x) Source # 
Instance details

Defined in Generics.Kind

Methods

mempty :: Field t x #

mappend :: Field t x -> Field t x -> Field t x #

mconcat :: [Field t x] -> Field t x #

Semigroup (Interpret t x) => Semigroup (Field t x) Source # 
Instance details

Defined in Generics.Kind

Methods

(<>) :: Field t x -> Field t x -> Field t x #

sconcat :: NonEmpty (Field t x) -> Field t x #

stimes :: Integral b => b -> Field t x -> Field t x #

Show (Interpret t x) => Show (Field t x) Source # 
Instance details

Defined in Generics.Kind

Methods

showsPrec :: Int -> Field t x -> ShowS #

show :: Field t x -> String #

showList :: [Field t x] -> ShowS #

Eq (Interpret t x) => Eq (Field t x) Source # 
Instance details

Defined in Generics.Kind

Methods

(==) :: Field t x -> Field t x -> Bool #

(/=) :: Field t x -> Field t x -> Bool #

Ord (Interpret t x) => Ord (Field t x) Source # 
Instance details

Defined in Generics.Kind

Methods

compare :: Field t x -> Field t x -> Ordering #

(<) :: Field t x -> Field t x -> Bool #

(<=) :: Field t x -> Field t x -> Bool #

(>) :: Field t x -> Field t x -> Bool #

(>=) :: Field t x -> Field t x -> Bool #

max :: Field t x -> Field t x -> Field t x #

min :: Field t x -> Field t x -> Field t x #

type SubstRep (Field t2 :: LoT (t1 -> k) -> Type) (x :: t1) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (Field t2 :: LoT (t1 -> k) -> Type) (x :: t1) = Field (SubstAtom t2 x)

data ((c :: Atom d Constraint) :=>: (f :: LoT d -> Type)) (x :: LoT d) where Source #

Constraints: used to represent constraints in a constructor. Replaces the (:=>:) type from GHC.Generics.Extra.

data Showable a = Show a => a -> X a

instance GenericK Showable (a :&&: LoT0) where
  type RepK Showable = (Show :$: a) :=>: (Field Var0)

Constructors

SuchThat :: Interpret c x => f x -> (c :=>: f) x 

Instances

Instances details
(Interpret (SubstAtom c x) xs => InterpretCons c x xs, Interpret c (x ':&&: xs) => InterpretSubst c x xs, SubstRep' f x xs) => SubstRep' (c :=>: f :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (c :=>: f) x :: LoT k -> Type Source #

Methods

substRep :: (c :=>: f) (x ':&&: xs) -> SubstRep (c :=>: f) x xs

unsubstRep :: SubstRep (c :=>: f) x xs -> (c :=>: f) (x ':&&: xs)

(k ~ Interpret t tys, Conv f f' tys) => Conv (k :=>: f) (t :=>: f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (t :=>: f') tys -> (k :=>: f) a Source #

toKindGenerics :: (k :=>: f) a -> (t :=>: f') tys Source #

(Interpret c x => Show (f x)) => Show ((c :=>: f) x) Source # 
Instance details

Defined in Generics.Kind

Methods

showsPrec :: Int -> (c :=>: f) x -> ShowS #

show :: (c :=>: f) x -> String #

showList :: [(c :=>: f) x] -> ShowS #

(Interpret c x => Eq (f x)) => Eq ((c :=>: f) x) Source # 
Instance details

Defined in Generics.Kind

Methods

(==) :: (c :=>: f) x -> (c :=>: f) x -> Bool #

(/=) :: (c :=>: f) x -> (c :=>: f) x -> Bool #

(Interpret c x => Ord (f x)) => Ord ((c :=>: f) x) Source # 
Instance details

Defined in Generics.Kind

Methods

compare :: (c :=>: f) x -> (c :=>: f) x -> Ordering #

(<) :: (c :=>: f) x -> (c :=>: f) x -> Bool #

(<=) :: (c :=>: f) x -> (c :=>: f) x -> Bool #

(>) :: (c :=>: f) x -> (c :=>: f) x -> Bool #

(>=) :: (c :=>: f) x -> (c :=>: f) x -> Bool #

max :: (c :=>: f) x -> (c :=>: f) x -> (c :=>: f) x #

min :: (c :=>: f) x -> (c :=>: f) x -> (c :=>: f) x #

type SubstRep (c :=>: f :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (c :=>: f :: LoT (t -> k) -> Type) (x :: t) = SubstAtom c x :=>: SubstRep f x

data Exists k (f :: LoT (k -> d) -> Type) (x :: LoT d) where Source #

Existentials: a representation of the form E f describes a constructor whose inner type is represented by f, and where the type variable at index 0, Var0, is existentially quantified.

data E where
 E :: t -> Exists

instance GenericK E LoT0 where
  type RepK E = Exists Type (Field Var0)

Constructors

Exists 

Fields

Instances

Instances details
(forall (t :: k). Show (f (t ':&&: x))) => Show (Exists k f x) Source # 
Instance details

Defined in Generics.Kind

Methods

showsPrec :: Int -> Exists k f x -> ShowS #

show :: Exists k f x -> String #

showList :: [Exists k f x] -> ShowS #

Atoms for Field

data Atom d (k :: TYPE r) where #

Constructors

Var :: forall d k1. TyVar d k1 -> Atom d k1 
Kon :: forall k1 d. k1 -> Atom d k1 
(:@:) :: forall d k1 k2. Atom d (k1 -> k2) -> Atom d k1 -> Atom d k2 
(:&:) :: forall d. Atom d Constraint -> Atom d Constraint -> Atom d Constraint 
ForAll :: forall d1 d. Atom (d1 -> d) Type -> Atom d Type 
(:=>>:) :: forall d. Atom d Constraint -> Atom d Type -> Atom d Type 
Eval :: forall d k1. Atom d (Exp k1) -> Atom d k1 

data TyVar d (k :: TYPE r) where #

Constructors

VZ :: forall x xs. TyVar (x -> xs) x 
VS :: forall xs k1 x. TyVar xs k1 -> TyVar (x -> xs) k1 

type (:$:) (f :: k1 -> k2) (x :: Atom d k1) = ('Kon f :: Atom d (k1 -> k2)) ':@: x #

type (:~:) (a :: Atom d k1) (b :: Atom d k1) = (('Kon ((~) :: k1 -> k1 -> Constraint) :: Atom d (k1 -> k1 -> Constraint)) ':@: a) ':@: b #

type (:~~:) (a :: Atom d k1) (b :: Atom d k2) = (('Kon ((~~) :: k1 -> k2 -> Constraint) :: Atom d (k1 -> k2 -> Constraint)) ':@: a) ':@: b #

type Var0 = 'Var ('VZ :: TyVar (k -> xs) k) #

type Var1 = 'Var ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x -> k -> xs) k) #

type Var2 = 'Var ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x1 -> k -> xs) k) :: TyVar (x -> x1 -> k -> xs) k) #

type Var3 = 'Var ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x2 -> k -> xs) k) :: TyVar (x1 -> x2 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> k -> xs) k) #

type Var4 = 'Var ('VS ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x3 -> k -> xs) k) :: TyVar (x2 -> x3 -> k -> xs) k) :: TyVar (x1 -> x2 -> x3 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> x3 -> k -> xs) k) #

type Var5 = 'Var ('VS ('VS ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x4 -> k -> xs) k) :: TyVar (x3 -> x4 -> k -> xs) k) :: TyVar (x2 -> x3 -> x4 -> k -> xs) k) :: TyVar (x1 -> x2 -> x3 -> x4 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> x3 -> x4 -> k -> xs) k) #

type Var6 = 'Var ('VS ('VS ('VS ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x5 -> k -> xs) k) :: TyVar (x4 -> x5 -> k -> xs) k) :: TyVar (x3 -> x4 -> x5 -> k -> xs) k) :: TyVar (x2 -> x3 -> x4 -> x5 -> k -> xs) k) :: TyVar (x1 -> x2 -> x3 -> x4 -> x5 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> x3 -> x4 -> x5 -> k -> xs) k) #

type Var7 = 'Var ('VS ('VS ('VS ('VS ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x6 -> k -> xs) k) :: TyVar (x5 -> x6 -> k -> xs) k) :: TyVar (x4 -> x5 -> x6 -> k -> xs) k) :: TyVar (x3 -> x4 -> x5 -> x6 -> k -> xs) k) :: TyVar (x2 -> x3 -> x4 -> x5 -> x6 -> k -> xs) k) :: TyVar (x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> k -> xs) k) #

type Var8 = 'Var ('VS ('VS ('VS ('VS ('VS ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x7 -> k -> xs) k) :: TyVar (x6 -> x7 -> k -> xs) k) :: TyVar (x5 -> x6 -> x7 -> k -> xs) k) :: TyVar (x4 -> x5 -> x6 -> x7 -> k -> xs) k) :: TyVar (x3 -> x4 -> x5 -> x6 -> x7 -> k -> xs) k) :: TyVar (x2 -> x3 -> x4 -> x5 -> x6 -> x7 -> k -> xs) k) :: TyVar (x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> x7 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> x7 -> k -> xs) k) #

type Var9 = 'Var ('VS ('VS ('VS ('VS ('VS ('VS ('VS ('VS ('VS ('VZ :: TyVar (k -> xs) k) :: TyVar (x8 -> k -> xs) k) :: TyVar (x7 -> x8 -> k -> xs) k) :: TyVar (x6 -> x7 -> x8 -> k -> xs) k) :: TyVar (x5 -> x6 -> x7 -> x8 -> k -> xs) k) :: TyVar (x4 -> x5 -> x6 -> x7 -> x8 -> k -> xs) k) :: TyVar (x3 -> x4 -> x5 -> x6 -> x7 -> x8 -> k -> xs) k) :: TyVar (x2 -> x3 -> x4 -> x5 -> x6 -> x7 -> x8 -> k -> xs) k) :: TyVar (x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> x7 -> x8 -> k -> xs) k) :: TyVar (x -> x1 -> x2 -> x3 -> x4 -> x5 -> x6 -> x7 -> x8 -> k -> xs) k) #

Lists of types

data LoT k where #

Constructors

LoT0 :: LoT Type 
(:&&:) :: forall k1 ks. k1 -> LoT ks -> LoT (k1 -> ks) 

Instances

Instances details
SubstRep' (U1 :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep U1 x :: LoT k -> Type Source #

Methods

substRep :: U1 (x ':&&: xs) -> SubstRep U1 x xs

unsubstRep :: SubstRep U1 x xs -> U1 (x ':&&: xs)

(SubstRep' f x xs, SubstRep' g x xs) => SubstRep' (f :*: g :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (f :*: g) x :: LoT k -> Type Source #

Methods

substRep :: (f :*: g) (x ':&&: xs) -> SubstRep (f :*: g) x xs

unsubstRep :: SubstRep (f :*: g) x xs -> (f :*: g) (x ':&&: xs)

(SubstRep' f x xs, SubstRep' g x xs) => SubstRep' (f :+: g :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (f :+: g) x :: LoT k -> Type Source #

Methods

substRep :: (f :+: g) (x ':&&: xs) -> SubstRep (f :+: g) x xs

unsubstRep :: SubstRep (f :+: g) x xs -> (f :+: g) (x ':&&: xs)

SubstRep' f x xs => SubstRep' (M1 i c f :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (M1 i c f) x :: LoT k -> Type Source #

Methods

substRep :: M1 i c f (x ':&&: xs) -> SubstRep (M1 i c f) x xs

unsubstRep :: SubstRep (M1 i c f) x xs -> M1 i c f (x ':&&: xs)

Conv (U1 :: Type -> Type) (U1 :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: U1 tys -> U1 a Source #

toKindGenerics :: U1 a -> U1 tys Source #

(Conv f f' tys, Conv g g' tys) => Conv (f :*: g) (f' :*: g' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (f' :*: g') tys -> (f :*: g) a Source #

toKindGenerics :: (f :*: g) a -> (f' :*: g') tys Source #

(Conv f f' tys, Conv g g' tys) => Conv (f :+: g) (f' :+: g' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (f' :+: g') tys -> (f :+: g) a Source #

toKindGenerics :: (f :+: g) a -> (f' :+: g') tys Source #

Conv f f' tys => Conv (M1 i c f) (M1 i c f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: M1 i c f' tys -> M1 i c f a Source #

toKindGenerics :: M1 i c f a -> M1 i c f' tys Source #

type SubstRep (U1 :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (U1 :: LoT (t -> k) -> Type) (x :: t) = U1 :: LoT k -> Type
type SubstRep (f :*: g :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (f :*: g :: LoT (t -> k) -> Type) (x :: t) = SubstRep f x :*: SubstRep g x
type SubstRep (f :+: g :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (f :+: g :: LoT (t -> k) -> Type) (x :: t) = SubstRep f x :+: SubstRep g x
type SubstRep (M1 i c f :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (M1 i c f :: LoT (t -> k) -> Type) (x :: t) = M1 i c (SubstRep f x)

type family (f :: k) :@@: (tys :: LoT k) where ... #

Equations

(f :: Type) :@@: (_1 :: LoT Type) = f 
(f :: k -> k') :@@: (as :: LoT (k -> k')) = f (HeadLoT as) :@@: TailLoT as 

type LoT1 (a :: k) = a ':&&: 'LoT0 #

type LoT2 (a :: k) (b :: k1) = a ':&&: (b ':&&: 'LoT0) #

data TyEnv where #

Constructors

TyEnv :: forall k. k -> LoT k -> TyEnv 

Generic type classes

class GenericK (f :: k) where Source #

Representable types of any kind. Examples:

instance GenericK Int
instance GenericK []
instance GenericK Either
instance GenericK (Either a)
instance GenericK (Either a b)

Minimal complete definition

Nothing

Associated Types

type RepK f :: LoT k -> Type Source #

Methods

fromK :: (f :@@: x) -> RepK f x Source #

Convert the data type to its representation.

default fromK :: (Generic (f :@@: x), Conv (Rep (f :@@: x)) (RepK f) x) => (f :@@: x) -> RepK f x Source #

toK :: RepK f x -> f :@@: x Source #

Convert from a representation to its corresponding data type.

default toK :: (Generic (f :@@: x), Conv (Rep (f :@@: x)) (RepK f) x) => RepK f x -> f :@@: x Source #

Instances

Instances details
GenericK Ranky Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Ranky :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Ranky :@@: x) -> RepK Ranky x Source #

toK :: forall (x :: LoT k). RepK Ranky x -> Ranky :@@: x Source #

GenericK (HappyFamily (Maybe a) :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (HappyFamily (Maybe a)) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (HappyFamily (Maybe a) :@@: x) -> RepK (HappyFamily (Maybe a)) x Source #

toK :: forall (x :: LoT k). RepK (HappyFamily (Maybe a)) x -> HappyFamily (Maybe a) :@@: x Source #

GenericK (HappyFamily [a] :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (HappyFamily [a]) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (HappyFamily [a] :@@: x) -> RepK (HappyFamily [a]) x Source #

toK :: forall (x :: LoT k). RepK (HappyFamily [a]) x -> HappyFamily [a] :@@: x Source #

GenericK (Tree a :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (Tree a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Tree a :@@: x) -> RepK (Tree a) x Source #

toK :: forall (x :: LoT k). RepK (Tree a) x -> Tree a :@@: x Source #

GenericK (WeirdTreeR a :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (WeirdTreeR a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (WeirdTreeR a :@@: x) -> RepK (WeirdTreeR a) x Source #

toK :: forall (x :: LoT k). RepK (WeirdTreeR a) x -> WeirdTreeR a :@@: x Source #

GenericK (Maybe a :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (Maybe a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Maybe a :@@: x) -> RepK (Maybe a) x Source #

toK :: forall (x :: LoT k). RepK (Maybe a) x -> Maybe a :@@: x Source #

GenericK ([a] :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK [a] :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). ([a] :@@: x) -> RepK [a] x Source #

toK :: forall (x :: LoT k). RepK [a] x -> [a] :@@: x Source #

GenericK (Either a b :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (Either a b) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Either a b :@@: x) -> RepK (Either a b) x Source #

toK :: forall (x :: LoT k). RepK (Either a b) x -> Either a b :@@: x Source #

GenericK (SimpleIndex a b :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (SimpleIndex a b) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (SimpleIndex a b :@@: x) -> RepK (SimpleIndex a b) x Source #

toK :: forall (x :: LoT k). RepK (SimpleIndex a b) x -> SimpleIndex a b :@@: x Source #

GenericK (Hkd f a :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (Hkd f a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Hkd f a :@@: x) -> RepK (Hkd f a) x Source #

toK :: forall (x :: LoT k). RepK (Hkd f a) x -> Hkd f a :@@: x Source #

GenericK (TTY m a :: Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (TTY m a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (TTY m a :@@: x) -> RepK (TTY m a) x Source #

toK :: forall (x :: LoT k). RepK (TTY m a) x -> TTY m a :@@: x Source #

GenericK Either Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Either :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Either :@@: x) -> RepK Either x Source #

toK :: forall (x :: LoT k). RepK Either x -> Either :@@: x Source #

GenericK SimpleIndex Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK SimpleIndex :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (SimpleIndex :@@: x) -> RepK SimpleIndex x Source #

toK :: forall (x :: LoT k). RepK SimpleIndex x -> SimpleIndex :@@: x Source #

GenericK HappyFamily Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK HappyFamily :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (HappyFamily :@@: x) -> RepK HappyFamily x Source #

toK :: forall (x :: LoT k). RepK HappyFamily x -> HappyFamily :@@: x Source #

GenericK Ranky2 Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Ranky2 :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Ranky2 :@@: x) -> RepK Ranky2 x Source #

toK :: forall (x :: LoT k). RepK Ranky2 x -> Ranky2 :@@: x Source #

GenericK Shower Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Shower :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Shower :@@: x) -> RepK Shower x Source #

toK :: forall (x :: LoT k). RepK Shower x -> Shower :@@: x Source #

GenericK Tree Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Tree :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Tree :@@: x) -> RepK Tree x Source #

toK :: forall (x :: LoT k). RepK Tree x -> Tree :@@: x Source #

GenericK WeirdTree Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK WeirdTree :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (WeirdTree :@@: x) -> RepK WeirdTree x Source #

toK :: forall (x :: LoT k). RepK WeirdTree x -> WeirdTree :@@: x Source #

GenericK WeirdTreeR Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK WeirdTreeR :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (WeirdTreeR :@@: x) -> RepK WeirdTreeR x Source #

toK :: forall (x :: LoT k). RepK WeirdTreeR x -> WeirdTreeR :@@: x Source #

GenericK Maybe Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Maybe :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Maybe :@@: x) -> RepK Maybe x Source #

toK :: forall (x :: LoT k). RepK Maybe x -> Maybe :@@: x Source #

GenericK [] Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK [] :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). ([] :@@: x) -> RepK [] x Source #

toK :: forall (x :: LoT k). RepK [] x -> [] :@@: x Source #

GenericK (Hkd :: (k -> Exp Type) -> k -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK Hkd :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k0). (Hkd :@@: x) -> RepK Hkd x Source #

toK :: forall (x :: LoT k0). RepK Hkd x -> Hkd :@@: x Source #

GenericK (P' :: Type -> k -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK P' :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k0). (P' :@@: x) -> RepK P' x Source #

toK :: forall (x :: LoT k0). RepK P' x -> P' :@@: x Source #

GenericK (Either a :: Type -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (Either a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (Either a :@@: x) -> RepK (Either a) x Source #

toK :: forall (x :: LoT k). RepK (Either a) x -> Either a :@@: x Source #

GenericK (SimpleIndex a :: Type -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (SimpleIndex a) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k). (SimpleIndex a :@@: x) -> RepK (SimpleIndex a) x Source #

toK :: forall (x :: LoT k). RepK (SimpleIndex a) x -> SimpleIndex a :@@: x Source #

GenericK (P k :: k -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (P k) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k0). (P k :@@: x) -> RepK (P k) x Source #

toK :: forall (x :: LoT k0). RepK (P k) x -> P k :@@: x Source #

GenericK (T :: k -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK T :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k0). (T :@@: x) -> RepK T x Source #

toK :: forall (x :: LoT k0). RepK T x -> T :@@: x Source #

GenericK (Hkd f :: k -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (Hkd f) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k0). (Hkd f :@@: x) -> RepK (Hkd f) x Source #

toK :: forall (x :: LoT k0). RepK (Hkd f) x -> Hkd f :@@: x Source #

GenericK (P' j :: k -> Type) Source # 
Instance details

Defined in Generics.Kind.Examples

Associated Types

type RepK (P' j) :: LoT k -> Type Source #

Methods

fromK :: forall (x :: LoT k0). (P' j :@@: x) -> RepK (P' j) x Source #

toK :: forall (x :: LoT k0). RepK (P' j) x -> P' j :@@: x Source #

type GenericF t f x = (GenericK f, x ~ SplitF t f, t ~ (f :@@: x)) Source #

fromF :: forall f t x. GenericF t f x => t -> RepK f x Source #

toF :: forall f t x. GenericF t f x => RepK f x -> t Source #

type GenericN n t f x = (GenericK f, 'TyEnv f x ~ SplitN n t, t ~ (f :@@: x)) Source #

fromN :: forall n t f x. GenericN n t f x => t -> RepK f x Source #

toN :: forall n t f x. GenericN n t f x => RepK f x -> t Source #

Getting more instances almost for free

fromRepK :: forall f x xs. (GenericK f, SubstRep' (RepK f) x xs) => (f x :@@: xs) -> SubstRep (RepK f) x xs Source #

toRepK :: forall f x xs. (GenericK f, SubstRep' (RepK f) x xs) => SubstRep (RepK f) x xs -> f x :@@: xs Source #

type family SubstRep f x :: LoT k -> Type Source #

Instances

Instances details
type SubstRep (U1 :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (U1 :: LoT (t -> k) -> Type) (x :: t) = U1 :: LoT k -> Type
type SubstRep (Field t2 :: LoT (t1 -> k) -> Type) (x :: t1) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (Field t2 :: LoT (t1 -> k) -> Type) (x :: t1) = Field (SubstAtom t2 x)
type SubstRep (f :*: g :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (f :*: g :: LoT (t -> k) -> Type) (x :: t) = SubstRep f x :*: SubstRep g x
type SubstRep (f :+: g :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (f :+: g :: LoT (t -> k) -> Type) (x :: t) = SubstRep f x :+: SubstRep g x
type SubstRep (c :=>: f :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (c :=>: f :: LoT (t -> k) -> Type) (x :: t) = SubstAtom c x :=>: SubstRep f x
type SubstRep (M1 i c f :: LoT (t -> k) -> Type) (x :: t) Source # 
Instance details

Defined in Generics.Kind

type SubstRep (M1 i c f :: LoT (t -> k) -> Type) (x :: t) = M1 i c (SubstRep f x)

class SubstRep' (f :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source #

Minimal complete definition

substRep, unsubstRep

Instances

Instances details
SubstRep' (U1 :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep U1 x :: LoT k -> Type Source #

Methods

substRep :: U1 (x ':&&: xs) -> SubstRep U1 x xs

unsubstRep :: SubstRep U1 x xs -> U1 (x ':&&: xs)

Interpret (SubstAtom t2 x) xs ~ Interpret t2 (x ':&&: xs) => SubstRep' (Field t2 :: LoT (t1 -> k) -> Type) (x :: t1) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (Field t2) x :: LoT k -> Type Source #

Methods

substRep :: Field t2 (x ':&&: xs) -> SubstRep (Field t2) x xs

unsubstRep :: SubstRep (Field t2) x xs -> Field t2 (x ':&&: xs)

(SubstRep' f x xs, SubstRep' g x xs) => SubstRep' (f :*: g :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (f :*: g) x :: LoT k -> Type Source #

Methods

substRep :: (f :*: g) (x ':&&: xs) -> SubstRep (f :*: g) x xs

unsubstRep :: SubstRep (f :*: g) x xs -> (f :*: g) (x ':&&: xs)

(SubstRep' f x xs, SubstRep' g x xs) => SubstRep' (f :+: g :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (f :+: g) x :: LoT k -> Type Source #

Methods

substRep :: (f :+: g) (x ':&&: xs) -> SubstRep (f :+: g) x xs

unsubstRep :: SubstRep (f :+: g) x xs -> (f :+: g) (x ':&&: xs)

(Interpret (SubstAtom c x) xs => InterpretCons c x xs, Interpret c (x ':&&: xs) => InterpretSubst c x xs, SubstRep' f x xs) => SubstRep' (c :=>: f :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (c :=>: f) x :: LoT k -> Type Source #

Methods

substRep :: (c :=>: f) (x ':&&: xs) -> SubstRep (c :=>: f) x xs

unsubstRep :: SubstRep (c :=>: f) x xs -> (c :=>: f) (x ':&&: xs)

SubstRep' f x xs => SubstRep' (M1 i c f :: LoT (t -> k) -> Type) (x :: t) (xs :: LoT k) Source # 
Instance details

Defined in Generics.Kind

Associated Types

type SubstRep (M1 i c f) x :: LoT k -> Type Source #

Methods

substRep :: M1 i c f (x ':&&: xs) -> SubstRep (M1 i c f) x xs

unsubstRep :: SubstRep (M1 i c f) x xs -> M1 i c f (x ':&&: xs)

type family SubstAtom (f :: Atom (t -> k) d) (x :: t) :: Atom k d where ... Source #

Equations

SubstAtom ('Var 'VZ) x = 'Kon x 
SubstAtom ('Var ('VS v)) x = 'Var v 
SubstAtom ('Kon t) x = 'Kon t 
SubstAtom (t1 ':@: t2) x = SubstAtom t1 x ':@: SubstAtom t2 x 
SubstAtom (t1 ':&: t2) x = SubstAtom t1 x ':&: SubstAtom t2 x 

Bridging with GHC.Generics

class Conv (gg :: Type -> Type) (kg :: LoT d -> Type) (tys :: LoT d) where Source #

Bridges a representation of a data type using the combinators in GHC.Generics with a representation using this module. You are never expected to manipulate this type class directly, it is part of the deriving mechanism for GenericK.

Methods

toGhcGenerics :: kg tys -> gg a Source #

toKindGenerics :: gg a -> kg tys Source #

Instances

Instances details
Conv (U1 :: Type -> Type) (U1 :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: U1 tys -> U1 a Source #

toKindGenerics :: U1 a -> U1 tys Source #

k ~ Interpret t tys => Conv (K1 p k :: Type -> Type) (Field t :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: Field t tys -> K1 p k a Source #

toKindGenerics :: K1 p k a -> Field t tys Source #

(Conv f f' tys, Conv g g' tys) => Conv (f :*: g) (f' :*: g' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (f' :*: g') tys -> (f :*: g) a Source #

toKindGenerics :: (f :*: g) a -> (f' :*: g') tys Source #

(Conv f f' tys, Conv g g' tys) => Conv (f :+: g) (f' :+: g' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (f' :+: g') tys -> (f :+: g) a Source #

toKindGenerics :: (f :+: g) a -> (f' :+: g') tys Source #

(k ~ Interpret t tys, Conv f f' tys) => Conv (k :=>: f) (t :=>: f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: (t :=>: f') tys -> (k :=>: f) a Source #

toKindGenerics :: (k :=>: f) a -> (t :=>: f') tys Source #

Conv f f' tys => Conv (M1 i c f) (f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: f' tys -> M1 i c f a Source #

toKindGenerics :: M1 i c f a -> f' tys Source #

Conv f f' tys => Conv (M1 i c f) (M1 i c f' :: LoT d -> Type) (tys :: LoT d) Source # 
Instance details

Defined in Generics.Kind

Methods

toGhcGenerics :: M1 i c f' tys -> M1 i c f a Source #

toKindGenerics :: M1 i c f a -> M1 i c f' tys Source #

Re-exported from Atom

Interpretation of atoms

type family Interpret (t :: Atom d k) (tys :: LoT d) :: k where ... #

Equations

Interpret ('Var v :: Atom d k) (tys :: LoT d) = InterpretVar v tys 
Interpret ('Kon t :: Atom d k) (tys :: LoT d) = t 
Interpret (f ':@: x :: Atom d k2) (tys :: LoT d) = Interpret f tys (Interpret x tys) 
Interpret (c ':&: d2 :: Atom d1 Constraint) (tys :: LoT d1) = (Interpret c tys, Interpret d2 tys) 
Interpret ('ForAll f :: Atom d Type) (tys :: LoT d) = ForAllI f tys 
Interpret (c ':=>>: f :: Atom d Type) (tys :: LoT d) = SuchThatI c f tys 
Interpret ('Eval f :: Atom d a) (tys :: LoT d) = Eval (Interpret f tys) 

type family InterpretVar (t :: TyVar d k) (tys :: LoT d) :: k where ... #

Equations

InterpretVar ('VZ :: TyVar (k -> k') k) (tys :: LoT (k -> k')) = HeadLoT tys 
InterpretVar ('VS v :: TyVar (k2 -> k') k1) (tys :: LoT (k2 -> k')) = InterpretVar v (TailLoT tys) 

type family Satisfies (cs :: [Atom d Constraint]) (tys :: LoT d) where ... #

Equations

Satisfies ('[] :: [Atom d Constraint]) (tys :: LoT d) = () 
Satisfies (c ': cs :: [Atom d Constraint]) (tys :: LoT d) = (Interpret c tys, Satisfies cs tys) 

type family ContainsTyVar (v :: TyVar d k) (t :: Atom d p) :: Bool where ... #

Equations

ContainsTyVar (v :: TyVar d p) ('Var v :: Atom d p) = 'True 
ContainsTyVar (v :: TyVar d k) ('Var w :: Atom d p) = 'False 
ContainsTyVar (v :: TyVar d k) ('Kon t :: Atom d p) = 'False 
ContainsTyVar (v :: TyVar d k) (f ':@: x :: Atom d p2) = Or (ContainsTyVar v f) (ContainsTyVar v x) 
ContainsTyVar (v :: TyVar d k) (x ':&: y :: Atom d Constraint) = Or (ContainsTyVar v x) (ContainsTyVar v y) 
ContainsTyVar (v :: TyVar d k) (c ':=>>: f :: Atom d Type) = Or (ContainsTyVar v c) (ContainsTyVar v f) 
ContainsTyVar (v :: TyVar xs k) ('ForAll f :: Atom xs Type) = ContainsTyVar ('VS v :: TyVar (x -> xs) k) f 

Auxiliary data types for interpretation

newtype ForAllI (f :: Atom (d1 -> d) Type) (tys :: LoT d) where #

Constructors

ForAllI :: forall {d1} {d} (f :: Atom (d1 -> d) Type) (tys :: LoT d). (forall (t :: d1). Interpret f (t ':&&: tys)) -> ForAllI f tys 

newtype SuchThatI (c :: Atom d Constraint) (f :: Atom d Type) (tys :: LoT d) where #

Constructors

SuchThatI 

Fields

newtype WrappedI (f :: Atom d Type) (tys :: LoT d) #

Constructors

WrapI 

Fields

toWrappedI :: forall {d1} {ks} (f :: Atom (d1 -> ks) Type) (tys :: LoT ks) (t :: d1). ForAllI f tys -> WrappedI f (t ':&&: tys) #

fromWrappedI :: forall {d1} {d} (f :: Atom (d1 -> d) Type) (tys :: LoT d). (forall (t :: d1). WrappedI f (t ':&&: tys)) -> ForAllI f tys #