| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Proarrow.Category.Instance.Collage
Contents
Description
The collage (or cograph) of a profunctor p: a category on the disjoint union of p's
two base categories (L- and R-tagged objects, via the kind ), whose
cross-arrows COLLAGE p are the elements L a ~> R bp a b (the L2R constructor).
The injections InjL/InjR present a profunctor as a single category sitting over the
walking arrow BOOL.
Synopsis
- data COLLAGE (p :: k +-> j)
- data Collage (a :: COLLAGE p) (b :: COLLAGE p) where
- InL :: forall {j} {k} (a1 :: j) (b1 :: j) (p :: k +-> j). (a1 ~> b1) -> Collage ('L a1 :: COLLAGE p) ('L b1 :: COLLAGE p)
- InR :: forall {k} {j} (a1 :: k) (b1 :: k) (p :: k +-> j). (a1 ~> b1) -> Collage ('R a1 :: COLLAGE p) ('R b1 :: COLLAGE p)
- L2R :: forall {k} {j} (p :: k +-> j) (a1 :: j) (b1 :: k). p a1 b1 -> Collage ('L a1 :: COLLAGE p) ('R b1 :: COLLAGE p)
- class IsLR (a :: COLLAGE p) where
- class HasArrowCollage (p :: k +-> j) (a :: COLLAGE p) (b :: COLLAGE p) where
- data family InjL :: forall (p :: k +-> j) -> j +-> COLLAGE p
- data family InjR :: forall (p :: k +-> j) -> k +-> COLLAGE p
- collageUniv :: forall {j} {k} (p :: k +-> j). Profunctor p => Iso' p (Direp (InjL p) (InjR p))
- data family CollageAsCoprod :: COLLAGE p +-> COPRODUCT j k
- data family ProjTo2 :: forall (p :: k +-> j) -> COLLAGE p +-> BOOL
- type family CollageObjects (p :: k +-> j) (xs :: [j]) :: [COLLAGE p] where ...
- withCollageL :: forall {j} {k} (p :: k +-> j) (x :: j) r. (Finite j, Finite k, KnownIndex x) => (KnownIndex ('L x :: COLLAGE p) => r) -> r
- withCollageR :: forall {j} {k} (p :: k +-> j) (y :: k) r. (Finite j, Finite k, KnownIndex y) => (KnownIndex ('R y :: COLLAGE p) => r) -> r
Documentation
data COLLAGE (p :: k +-> j) Source Github #
Instances
data Collage (a :: COLLAGE p) (b :: COLLAGE p) where Source Github #
Constructors
| InL :: forall {j} {k} (a1 :: j) (b1 :: j) (p :: k +-> j). (a1 ~> b1) -> Collage ('L a1 :: COLLAGE p) ('L b1 :: COLLAGE p) | |
| InR :: forall {k} {j} (a1 :: k) (b1 :: k) (p :: k +-> j). (a1 ~> b1) -> Collage ('R a1 :: COLLAGE p) ('R b1 :: COLLAGE p) | |
| L2R :: forall {k} {j} (p :: k +-> j) (a1 :: j) (b1 :: k). p a1 b1 -> Collage ('L a1 :: COLLAGE p) ('R b1 :: COLLAGE p) |
Instances
| Profunctor p => Promonad (Collage :: COLLAGE p -> COLLAGE p -> Type) Source Github # | |
| (Finitary (Hom j), Finitary (Hom k), Finitary p) => Finitary (Collage :: COLLAGE p -> COLLAGE p -> Type) Source Github # | The collage of a finitary profunctor between finite categories is a finite category: a
hom-set is a base hom-set, an element set of This is the cheapest source of a finite category that is not a poset: elements of |
Defined in Proarrow.Category.Instance.Collage Methods size :: forall (a :: COLLAGE p) (b :: COLLAGE p). (Ob a, Ob b) => Natural Source Github # toIndex :: forall (a :: COLLAGE p) (b :: COLLAGE p). (Ob a, Ob b) => Collage a b -> Natural Source Github # fromIndex :: forall (a :: COLLAGE p) (b :: COLLAGE p). (Ob a, Ob b) => Natural -> Collage a b Source Github # elements :: forall (a :: COLLAGE p) (b :: COLLAGE p). (Ob a, Ob b) => [Collage a b] Source Github # | |
| (Decidable j, Decidable k, DecidableProfunctor p) => DecidableProfunctor (Collage :: COLLAGE p -> COLLAGE p -> Type) Source Github # | Decided piecewise: within either side by that side's order, across by |
Defined in Proarrow.Category.Instance.Collage Methods decide :: forall (a :: COLLAGE p) (b :: COLLAGE p). (Ob a, Ob b) => Decision (Collage :: COLLAGE p -> COLLAGE p -> Type) a b (Holds (Collage :: COLLAGE p -> COLLAGE p -> Type) a b) Source Github # toHolds :: forall (a :: COLLAGE p) (b :: COLLAGE p) r. Collage a b -> ((Holds (Collage :: COLLAGE p -> COLLAGE p -> Type) a b ~ 'TRU, Ob a, Ob b) => r) -> r Source Github # | |
| (Thin j, Thin k, ThinProfunctor p) => ThinProfunctor (Collage :: COLLAGE p -> COLLAGE p -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Collage Methods arr :: forall (a :: COLLAGE p) (b :: COLLAGE p). (Ob a, Ob b, HasArrow (Collage :: COLLAGE p -> COLLAGE p -> Type) a b) => Collage a b Source Github # withArr :: forall (a :: COLLAGE p) (b :: COLLAGE p) r. Collage a b -> ((HasArrow (Collage :: COLLAGE p -> COLLAGE p -> Type) a b, Ob a, Ob b) => r) -> r Source Github # | |
| Profunctor p => Profunctor (Collage :: COLLAGE p -> COLLAGE p -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Collage Methods dimap :: forall (c :: COLLAGE p) (a :: COLLAGE p) (b :: COLLAGE p) (d :: COLLAGE p). (c ~> a) -> (b ~> d) -> Collage a b -> Collage c d Source Github # lmap :: forall (c :: COLLAGE p) (a :: COLLAGE p) (b :: COLLAGE p). (c ~> a) -> Collage a b -> Collage c b Source Github # rmap :: forall (b :: COLLAGE p) (d :: COLLAGE p) (a :: COLLAGE p). (b ~> d) -> Collage a b -> Collage a d Source Github # (\\) :: forall (a :: COLLAGE p) (b :: COLLAGE p) r. ((Ob a, Ob b) => r) -> Collage a b -> r Source Github # | |
| type HasArrow (Collage :: COLLAGE p -> COLLAGE p -> Type) (a :: COLLAGE p) (b :: COLLAGE p) Source Github # | |
Defined in Proarrow.Category.Instance.Collage | |
| type Holds (Collage :: COLLAGE p -> COLLAGE p -> Type) ('L a :: COLLAGE p) ('L b :: COLLAGE p) Source Github # | |
| type Holds (Collage :: COLLAGE p -> COLLAGE p -> Type) ('L a :: COLLAGE p) ('R b :: COLLAGE p) Source Github # | |
| type Holds (Collage :: COLLAGE p -> COLLAGE p -> Type) ('R a :: COLLAGE p) ('L b :: COLLAGE p) Source Github # | |
| type Holds (Collage :: COLLAGE p -> COLLAGE p -> Type) ('R a :: COLLAGE p) ('R b :: COLLAGE p) Source Github # | |
class HasArrowCollage (p :: k +-> j) (a :: COLLAGE p) (b :: COLLAGE p) where Source Github #
Instances
| (Thin j, HasArrow ((~>) :: CAT j) a b, Ob a, Ob b) => HasArrowCollage (p :: k +-> j) ('L a :: COLLAGE p) ('L b :: COLLAGE p) Source Github # | |
| (ThinProfunctor p, HasArrow p a b, Ob a, Ob b) => HasArrowCollage (p :: k +-> j) ('L a :: COLLAGE p) ('R b :: COLLAGE p) Source Github # | |
| (Thin k, HasArrow ((~>) :: CAT k) a b, Ob a, Ob b) => HasArrowCollage (p :: k +-> j) ('R a :: COLLAGE p) ('R b :: COLLAGE p) Source Github # | |
data family InjL :: forall (p :: k +-> j) -> j +-> COLLAGE p Source Github #
data family InjR :: forall (p :: k +-> j) -> k +-> COLLAGE p Source Github #
collageUniv :: forall {j} {k} (p :: k +-> j). Profunctor p => Iso' p (Direp (InjL p) (InjR p)) Source Github #
data family CollageAsCoprod :: COLLAGE p +-> COPRODUCT j k Source Github #
Instances
| DiscreteProfunctor p => FunctorForRep (CollageAsCoprod :: COLLAGE p +-> COPRODUCT j k) Source Github # | |
| type (CollageAsCoprod :: COLLAGE p +-> COPRODUCT j k) @ ('L a :: COLLAGE p) Source Github # | |
Defined in Proarrow.Category.Instance.Collage | |
| type (CollageAsCoprod :: COLLAGE p +-> COPRODUCT j k) @ ('R a :: COLLAGE p) Source Github # | |
Defined in Proarrow.Category.Instance.Collage | |
data family ProjTo2 :: forall (p :: k +-> j) -> COLLAGE p +-> BOOL Source Github #
Numbering the collage
type family CollageObjects (p :: k +-> j) (xs :: [j]) :: [COLLAGE p] where ... Source Github #
The collage numbers the left category's objects first and the right category's after them.
Equations
| CollageObjects (p :: k +-> j) ('[] :: [j]) = MapWrap ('R :: k -> COLLAGE p) (Objects k) | |
| CollageObjects (p :: k +-> j) (x ': xs :: [j]) = ('L x :: COLLAGE p) ': CollageObjects p xs |
withCollageL :: forall {j} {k} (p :: k +-> j) (x :: j) r. (Finite j, Finite k, KnownIndex x) => (KnownIndex ('L x :: COLLAGE p) => r) -> r Source Github #
An object of the left category is an object of the collage, keeping its index; one of the right category is too, shifted past all the left ones. Both walk the left object list, and both hand the fact to a continuation, since at each step the statement about the tail is the statement about the whole list already reduced.
withCollageR :: forall {j} {k} (p :: k +-> j) (y :: k) r. (Finite j, Finite k, KnownIndex y) => (KnownIndex ('R y :: COLLAGE p) => r) -> r Source Github #