module Data.Yoko.View where
import Data.Yoko.Representation
import Data.Yoko.TypeSums (Embed, Partition, (:-:))
import Data.Yoko.Each
type family Tag dc
type family Range dc
class (Generic dc, DT (Range dc)) => DC dc where rejoin :: dc -> Range dc
type family DCs t
type Disbanded t = DCsOf t (DCs t)
class Each IsDCOf (DCs t) => DT t where disband :: t -> Disbanded t
class (Partition (DCs (Range dc)) (N dc) (DCs (Range dc) :-: N dc),
Embed (N dc) (DCs (Range dc))) => IsDCOf dc
instance (Partition (DCs (Range dc)) (N dc) (DCs (Range dc) :-: N dc),
Embed (N dc) (DCs (Range dc))) => IsDCOf dc