yoko-0.3.1.1: Generic Programming with Disbanded Data Types

Safe HaskellSafe-Infered

Data.Yoko

Documentation

type Equal a b = IsEQ (Compare a b)Source

data U Source

Constructors

U 

Instances

Applicative (Idiom cnv) => HComposRs cnv U U 

data a :*: b Source

Constructors

a :*: b 

Instances

(HComposRs cnv a a', HComposRs cnv b b') => HComposRs cnv (:*: a b) (:*: a' b') 

newtype N a Source

Constructors

N a 

Instances

cxt a => Each_ cxt (N a) 
(Generic dc, ~ * (Just (N dc')) (FindDCs (Tag dc) (DCs t)), HComposRs cnv (Rep dc) (Rep dc'), DC dc', ~ * (Range dc') t, DT t) => HCompos cnv (N dc) t 
Generic a => EachGeneric (N a) 
(~ * (Locate x sup) (Just path), InjectAt path x sup) => Embed (N x) sup 
Partition_N (Elem x subL) x subL subR => Partition (N x) subL subR 
InjectAt (Here a) a (N a) 

data a :+: b Source

Constructors

L a 
R b 

Instances

(Each_ cxt a, Each_ cxt b) => Each_ cxt (:+: a b) 
(HCompos cnv a t, HCompos cnv b t) => HCompos cnv (:+: a b) t 
InjectAt path a r => InjectAt (TurnRight path) a (:+: l r) 
InjectAt path a l => InjectAt (TurnLeft path) a (:+: l r) 
(Eq a, Eq b) => Eq (:+: a b) 
(Ord a, Ord b) => Ord (:+: a b) 
(Read a, Read b) => Read (:+: a b) 
(Show a, Show b) => Show (:+: a b) 
(EachGeneric a, EachGeneric b) => EachGeneric (:+: a b) 
(Embed l sup, Embed r sup) => Embed (:+: l r) sup 
(Partition a subL subR, Partition b subL subR) => Partition (:+: a b) subL subR 

newtype Par1 f a Source

Constructors

Par1 (f a) 

newtype Par2 f a b Source

Constructors

Par2 (f a b) 

newtype Dep a Source

Constructors

Dep a 

Instances

Applicative (Idiom cnv) => HComposRs cnv (Dep a) (Dep a) 

newtype Rec a Source

Constructors

Rec a 

Instances

HCompos cnv a b => HComposRs cnv (Rec a) (Rec b) 

type family Rep a Source

class Generic a whereSource

Methods

rep :: a -> Rep aSource

obj :: Rep a -> aSource

unDep :: Dep t -> tSource

unRec :: Rec t -> tSource

mapRec :: (t -> a) -> Rec t -> Rec aSource

unPar1 :: Par1 t t1 -> t t1Source

unPar2 :: Par2 t t1 t2 -> t t1 t2Source

unN :: N t -> tSource

foldN :: (b -> c) -> N b -> cSource

mapN :: (b1 -> b) -> N b1 -> N bSource

foldPlus :: (t1 -> t) -> (t2 -> t) -> :+: t1 t2 -> tSource

mapPlus :: (t -> b) -> (t1 -> b1) -> :+: t t1 -> :+: b b1Source

mapTimes :: (t -> a) -> (t1 -> b) -> :*: t t1 -> :*: a bSource

foldTimes :: (t3 -> t4 -> t) -> (t1 -> t3) -> (t2 -> t4) -> :*: t1 t2 -> tSource

type family DistMaybePlus a b Source

data Z Source

data S n Source

type family Add n m Source

type family CountRs rep Source

newtype DCsOf t sum Source

Constructors

DCsOf sum 

Instances

Each_ cxt sum => Each_ cxt (DCsOf t sum) 
HCompos cnv sum t => HCompos cnv (DCsOf a sum) t 
Functor (DCsOf t) 

unDCsOf :: DCsOf t t1 -> t1Source

(|||) :: (DCsOf t sumL -> a) -> (DCsOf t sumR -> a) -> DCsOf t (sumL :+: sumR) -> aSource

type family sum :-: sum2 Source

class Embed sub sup Source

Instances

(~ * (Locate x sup) (Just path), InjectAt path x sup) => Embed (N x) sup 
(Embed l sup, Embed r sup) => Embed (:+: l r) sup 

embed :: Embed sub sup => sub -> supSource

inject :: Embed (N a) sum => a -> sumSource

class Partition sup subL subR Source

Instances

Partition_N (Elem x subL) x subL subR => Partition (N x) subL subR 
(Partition a subL subR, Partition b subL subR) => Partition (:+: a b) subL subR 

project :: Partition sum (N a) (sum :-: N a) => sum -> Either a (sum :-: N a)Source

partition :: Partition sup sub (sup :-: sub) => sup -> Either sub (sup :-: sub)Source

type family Tag dc Source

type family Range dc Source

class (Generic dc, DT (Range dc)) => DC dc whereSource

Methods

rejoin :: dc -> Range dcSource

type family DCs t Source

type Disbanded t = DCsOf t (DCs t)Source

class Each IsDCOf (DCs t) => DT t whereSource

Methods

disband :: t -> Disbanded tSource

class (Partition (DCs (Range dc)) (N dc) (DCs (Range dc) :-: N dc), Embed (N dc) (DCs (Range dc))) => IsDCOf dc Source

Instances

(Partition (DCs (Range dc)) (N dc) (:-: (DCs (Range dc)) (N dc)), Embed (N dc) (DCs (Range dc))) => IsDCOf dc 

one :: (dc -> a) -> DCsOf (Range dc) (N dc) -> aSource

(.|.) :: ~ * (Range dc) (Range dc1) => (dc -> a) -> (dc1 -> a) -> DCsOf (Range dc1) (:+: (N dc) (N dc1)) -> aSource

(.||) :: (dc -> a) -> (DCsOf (Range dc) sumR -> a) -> DCsOf (Range dc) (:+: (N dc) sumR) -> aSource

(||.) :: (DCsOf (Range dc) sumL -> a) -> (dc -> a) -> DCsOf (Range dc) (:+: sumL (N dc)) -> aSource

disbanded :: Embed (N dc) (DCs (Range dc)) => dc -> Disbanded (Range dc)Source

band :: forall t. Each (ConDCOf t) (DCs t) => Disbanded t -> tSource

class (Range dc ~ t, DC dc) => ConDCOf t dc Source

Instances

(~ * (Range dc) t, DC dc) => ConDCOf t dc 

inject :: Embed (N dc) sum => dc -> sumSource

partition :: Partition sum sub (sum :-: sub) => DCsOf t sum -> Either (DCsOf t sub) (DCsOf t (sum :-: sub))Source

project :: Partition sum (N dc) (sum :-: N dc) => DCsOf (Range dc) sum -> Either dc (DCsOf (Range dc) (sum :-: N dc))Source

reps :: EachGeneric sum => DCsOf t sum -> EachRep sumSource

type family EachRep sum Source

class EachGeneric sum whereSource

Methods

repEach :: sum -> EachRep sumSource

objEach :: EachRep sum -> sumSource

Instances

exact_case :: (DT t, Partition (DCs t) dcs (DCs t :-: dcs)) => (DCsOf t (DCs t :-: dcs) -> a) -> t -> (DCsOf t dcs -> a) -> aSource

ig_from :: (DT t, EachGeneric (DCs t)) => t -> EachRep (DCs t)Source