| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Proarrow.Category.Instance.FinHask
Description
The category of finite Haskell types: objects are types with Universe/Finite
instances (wrapped in FH), and a morphism is a function stored extensionally as a finite
lookup table (Map), so morphisms can be enumerated, shown and compared. A finite,
fully inspectable stand-in for Proarrow.Category.Instance.Hask.
Synopsis
- newtype Fin (n :: Nat) = Fin {}
- data FINHASK = FH Type
- data FinHask (a :: FINHASK) (b :: FINHASK) where
- (!) :: forall (a :: FINHASK) (b :: FINHASK). Ord (UN 'FH a) => FinHask a b -> UN 'FH a -> UN 'FH b
- arr :: (Ob ('FH a), Ob ('FH b)) => (a -> b) -> FinHask ('FH a) ('FH b)
- reifyList :: [a] -> (forall l. Ob ('FH l) => Map l a -> r) -> r
- fromList :: (Ob ('FH a), Ob ('FH b)) => [(a, b)] -> FinHask ('FH a) ('FH b)
- toList :: (Ob ('FH a), Ob ('FH b)) => FinHask ('FH a) ('FH b) -> [(a, b)]
- position :: (Finite x, Eq x) => x -> Natural
- card :: Finite x => Natural
- unionFind :: Ord a => [(a, a)] -> a -> a
Documentation
newtype Fin (n :: Nat) Source Github #
Instances
| Num (Fin n) Source Github # | |
Defined in Proarrow.Category.Instance.FinHask | |
| Show (Fin n) Source Github # | |
| Eq (Fin n) Source Github # | |
| Ord (Fin n) Source Github # | |
Defined in Proarrow.Category.Instance.FinHask | |
| KnownNat n => Finite (Fin n) Source Github # | |
| KnownNat n => Universe (Fin n) Source Github # | |
Defined in Proarrow.Category.Instance.FinHask | |
Instances
| Monoidal FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Associated Types
Methods withOb2 :: forall (a :: FINHASK) (b :: FINHASK) r. (Ob a, Ob b) => (Ob (a ** b) => r) -> r Source Github # leftUnitor :: forall (a :: FINHASK). Ob a => ((Unit :: FINHASK) ** a) ~> a Source Github # leftUnitorInv :: forall (a :: FINHASK). Ob a => a ~> ((Unit :: FINHASK) ** a) Source Github # rightUnitor :: forall (a :: FINHASK). Ob a => (a ** (Unit :: FINHASK)) ~> a Source Github # rightUnitorInv :: forall (a :: FINHASK). Ob a => a ~> (a ** (Unit :: FINHASK)) Source Github # associator :: forall (a :: FINHASK) (b :: FINHASK) (c :: FINHASK). (Ob a, Ob b, Ob c) => ((a ** b) ** c) ~> (a ** (b ** c)) Source Github # associatorInv :: forall (a :: FINHASK) (b :: FINHASK) (c :: FINHASK). (Ob a, Ob b, Ob c) => (a ** (b ** c)) ~> ((a ** b) ** c) Source Github # | |||||||||
| SymMonoidal FINHASK Source Github # | |||||||||
| Closed FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Methods withObExp :: forall (a :: FINHASK) (b :: FINHASK) r. (Ob a, Ob b) => (Ob (a ~~> b) => r) -> r Source Github # curry :: forall (a :: FINHASK) (b :: FINHASK) (c :: FINHASK). (Ob a, Ob b) => ((a ** b) ~> c) -> a ~> (b ~~> c) Source Github # apply :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => ((a ~~> b) ** a) ~> b Source Github # (^^^) :: forall (a :: FINHASK) (b :: FINHASK) (x :: FINHASK) (y :: FINHASK). (b ~> y) -> (x ~> a) -> (a ~~> b) ~> (x ~~> y) Source Github # | |||||||||
| CopyDiscard FINHASK Source Github # | |||||||||
| Distributive FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Methods distL :: forall (a :: FINHASK) (b :: FINHASK) (c :: FINHASK). (Ob a, Ob b, Ob c) => (a ** (b || c)) ~> ((a ** b) || (a ** c)) Source Github # distR :: forall (a :: FINHASK) (b :: FINHASK) (c :: FINHASK). (Ob a, Ob b, Ob c) => ((a || b) ** c) ~> ((a ** c) || (b ** c)) Source Github # absorbL :: forall (a :: FINHASK). Ob a => (a ** (InitialObject :: FINHASK)) ~> (InitialObject :: FINHASK) Source Github # absorbR :: forall (a :: FINHASK). Ob a => ((InitialObject :: FINHASK) ** a) ~> (InitialObject :: FINHASK) Source Github # | |||||||||
| ElementaryTopos FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| HasEpiMonoFactorization FINHASK Source Github # | |||||||||
| HasSubobjectClassifier FINHASK Source Github # |
| ||||||||
Defined in Proarrow.Category.Instance.FinHask Associated Types
| |||||||||
| HasBinaryCoproducts FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Methods withObCoprod :: forall (a :: FINHASK) (b :: FINHASK) r. (Ob a, Ob b) => (Ob (a || b) => r) -> r Source Github # lft :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => a ~> (a || b) Source Github # rgt :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => b ~> (a || b) Source Github # (|||) :: forall (x :: FINHASK) (a :: FINHASK) (y :: FINHASK). (x ~> a) -> (y ~> a) -> (x || y) ~> a Source Github # (+++) :: forall (a :: FINHASK) (b :: FINHASK) (x :: FINHASK) (y :: FINHASK). (a ~> x) -> (b ~> y) -> (a || b) ~> (x || y) Source Github # | |||||||||
| HasCoequalizers FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| HasInitialObject FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Associated Types
| |||||||||
| HasPushouts FINHASK Source Github # | Exercise 6.22 of Seven Sketches >>> let l :: FinHask (FH (Fin 4)) (FH (Fin 3)) = fromList [(0,0), (1,0), (2,1), (3,2)] >>> let r :: FinHask (FH (Fin 4)) (FH (Fin 5)) = fromList [(0,0), (1,2), (2,4), (3,4)] >>> (pushout l r l' r' -> P.show (l', r')) :: P.String "(fromList [(0,1),(1,3),(2,3)],fromList [(0,1),(1,0),(2,1),(3,2),(4,3)])" | ||||||||
Defined in Proarrow.Category.Instance.FinHask Methods pushout :: forall (o :: FINHASK) (a :: FINHASK) (b :: FINHASK) r. (o ~> a) -> (o ~> b) -> (forall (p :: FINHASK). (a ~> p) -> (b ~> p) -> r) -> r Source Github # factorPushout :: forall (a :: FINHASK) (b :: FINHASK) (p :: FINHASK) (q :: FINHASK). (a ~> p) -> (b ~> p) -> (a ~> q) -> (b ~> q) -> p ~> q Source Github # | |||||||||
| CategoryOf FINHASK Source Github # | The category of finite Haskell types, with morphisms stored extensionally as finite lookup tables. | ||||||||
| HasBinaryProducts FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Methods withObProd :: forall (a :: FINHASK) (b :: FINHASK) r. (Ob a, Ob b) => (Ob (a && b) => r) -> r Source Github # fst :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => (a && b) ~> a Source Github # snd :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => (a && b) ~> b Source Github # (&&&) :: forall (a :: FINHASK) (x :: FINHASK) (y :: FINHASK). (a ~> x) -> (a ~> y) -> a ~> (x && y) Source Github # (***) :: forall (a :: FINHASK) (b :: FINHASK) (x :: FINHASK) (y :: FINHASK). (a ~> x) -> (b ~> y) -> (a && b) ~> (x && y) Source Github # | |||||||||
| HasEqualizers FINHASK Source Github # |
| ||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| HasPullbacks FINHASK Source Github # | Example 3.84 of Seven Sketches (A: 0=red, 1=blue, 2=black) >>> data Color = Red | Blue | Black deriving (P.Eq, P.Ord, P.Show, P.Enum, P.Bounded, Universe, Finite) >>> let f :: FinHask (FH (Fin 6)) (FH Color) = fromList [(0,Red), (1,Blue), (2,Red), (3,Red), (4,Black), (5,Blue)] >>> let g :: FinHask (FH (Fin 4)) (FH Color) = fromList [(0,Black), (1,Red), (2,Blue), (3,Red)] >>> (pullback f g (FinHask l) (FinHask r) -> P.show (P.zip (M.elems l) (M.elems r))) :: P.String "[(0,1),(0,3),(1,2),(2,1),(2,3),(3,1),(3,3),(4,0),(5,2)]" | ||||||||
Defined in Proarrow.Category.Instance.FinHask Methods pullback :: forall (o :: FINHASK) (a :: FINHASK) (b :: FINHASK) r. (a ~> o) -> (b ~> o) -> (forall (p :: FINHASK). (p ~> a) -> (p ~> b) -> r) -> r Source Github # factorPullback :: forall (a :: FINHASK) (b :: FINHASK) (p :: FINHASK) (q :: FINHASK). (p ~> a) -> (p ~> b) -> (q ~> a) -> (q ~> b) -> q ~> p Source Github # | |||||||||
| HasTerminalObject FINHASK Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Associated Types
| |||||||||
| HasPushoutComplements FINHASK Source Github # | |||||||||
| Copowered FINHASK FINHASK Source Github # | Kept with the class, for the same reason as | ||||||||
Defined in Proarrow.Colimit.Copower Associated Types
Methods withObCopower :: forall (a :: FINHASK) (n :: FINHASK) r. (Ob a, Ob n) => (Ob (n *. a) => r) -> r Source Github # copower :: forall (a :: FINHASK) (b :: FINHASK) (n :: FINHASK). (Ob a, Ob b) => (n ~> HomObj FINHASK a b) -> (n *. a) ~> b Source Github # uncopower :: forall (a :: FINHASK) (n :: FINHASK) (b :: FINHASK). (Ob a, Ob n) => ((n *. a) ~> b) -> n ~> HomObj FINHASK a b Source Github # | |||||||||
| Promonad FinHask Source Github # | |||||||||
| Powered FINHASK FINHASK Source Github # | Kept with the class: | ||||||||
Defined in Proarrow.Limit.Power Associated Types
Methods withObPower :: forall (a :: FINHASK) (n :: FINHASK) r. (Ob a, Ob n) => (Ob (a ^ n) => r) -> r Source Github # power :: forall (a :: FINHASK) (b :: FINHASK) (n :: FINHASK). (Ob a, Ob b) => (n ~> HomObj FINHASK a b) -> a ~> (b ^ n) Source Github # unpower :: forall (b :: FINHASK) (n :: FINHASK) (a :: FINHASK). (Ob b, Ob n) => (a ~> (b ^ n)) -> n ~> HomObj FINHASK a b Source Github # | |||||||||
| Finitary FinHask Source Github # | The hom-sets of | ||||||||
Defined in Proarrow.Category.Instance.FinHask Methods size :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => Natural Source Github # toIndex :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => FinHask a b -> Natural Source Github # fromIndex :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => Natural -> FinHask a b Source Github # elements :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => [FinHask a b] Source Github # | |||||||||
| FiniteCat k => InternalIn (k :: Kind) FINHASK Source Github # | Every finite category is a category internal to At
| ||||||||
Defined in Proarrow.Category.Internal Associated Types
| |||||||||
| MonoidalProfunctor FinHask Source Github # | |||||||||
| Profunctor FinHask Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask Methods dimap :: forall (c :: FINHASK) (a :: FINHASK) (b :: FINHASK) (d :: FINHASK). (c ~> a) -> (b ~> d) -> FinHask a b -> FinHask c d Source Github # lmap :: forall (c :: FINHASK) (a :: FINHASK) (b :: FINHASK). (c ~> a) -> FinHask a b -> FinHask c b Source Github # rmap :: forall (b :: FINHASK) (d :: FINHASK) (a :: FINHASK). (b ~> d) -> FinHask a b -> FinHask a d Source Github # (\\) :: forall (a :: FINHASK) (b :: FINHASK) r. ((Ob a, Ob b) => r) -> FinHask a b -> r Source Github # | |||||||||
| (Finitary p, LocallyFinite j, LocallyFinite k) => EnrichedProfunctor FINHASK (p :: j +-> k) Source Github # | A finitary profunctor is a profunctor enriched in finite sets. The hom-object is the
hom-set itself, which | ||||||||
Defined in Proarrow.Category.Enriched Methods withProObj :: forall (a :: k) (b :: j) r. (Ob a, Ob b) => (Ob (ProObj FINHASK p a b) => r) -> r Source Github # underlying :: forall (a :: k) (b :: j). p a b -> (Unit :: FINHASK) ~> ProObj FINHASK p a b Source Github # enriched :: forall (a :: k) (b :: j). (Ob a, Ob b) => ((Unit :: FINHASK) ~> ProObj FINHASK p a b) -> p a b Source Github # rmap :: forall (a :: k) (b :: j) (c :: j). (Ob a, Ob b, Ob c) => (HomObj FINHASK b c ** ProObj FINHASK p a b) ~> ProObj FINHASK p a c Source Github # lmap :: forall (a :: k) (b :: j) (c :: k). (Ob a, Ob b, Ob c) => (HomObj FINHASK c a ** ProObj FINHASK p a b) ~> ProObj FINHASK p c b Source Github # | |||||||||
| Ob ('FH a) => CocommutativeComonoid ('FH a :: FINHASK) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| Ob ('FH a) => Comonoid ('FH a :: FINHASK) Source Github # | |||||||||
| Monoid ('FH ()) Source Github # | |||||||||
| HasBinaryCoproducts (SORTED s) Source Github # | The ports of both, those of the second numbered after those of the first. | ||||||||
Defined in Proarrow.Category.Instance.OpenHypergraph Methods withObCoprod :: forall (a :: SORTED s) (b :: SORTED s) r. (Ob a, Ob b) => (Ob (a || b) => r) -> r Source Github # lft :: forall (a :: SORTED s) (b :: SORTED s). (Ob a, Ob b) => a ~> (a || b) Source Github # rgt :: forall (a :: SORTED s) (b :: SORTED s). (Ob a, Ob b) => b ~> (a || b) Source Github # (|||) :: forall (x :: SORTED s) (a :: SORTED s) (y :: SORTED s). (x ~> a) -> (y ~> a) -> (x || y) ~> a Source Github # (+++) :: forall (a :: SORTED s) (b :: SORTED s) (x :: SORTED s) (y :: SORTED s). (a ~> x) -> (b ~> y) -> (a || b) ~> (x || y) Source Github # | |||||||||
| HasInitialObject (SORTED s) Source Github # | No ports. | ||||||||
Defined in Proarrow.Category.Instance.OpenHypergraph Associated Types
| |||||||||
| HasPushouts (SORTED s) Source Github # | The pushout of | ||||||||
Defined in Proarrow.Category.Instance.OpenHypergraph Methods pushout :: forall (o :: SORTED s) (a :: SORTED s) (b :: SORTED s) r. (o ~> a) -> (o ~> b) -> (forall (p :: SORTED s). (a ~> p) -> (b ~> p) -> r) -> r Source Github # factorPushout :: forall (a :: SORTED s) (b :: SORTED s) (p :: SORTED s) (q :: SORTED s). (a ~> p) -> (b ~> p) -> (a ~> q) -> (b ~> q) -> p ~> q Source Github # | |||||||||
| Alternative (Boxes l :: SORTED s -> Type) Source Github # | No boxes, and the boxes of both sides, the nodes of the second numbered after those of the first. | ||||||||
| Functor (Boxes l :: SORTED s -> Type) Source Github # | |||||||||
| type Unit Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| type Omega Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| type InitialObject Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| type (~>) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| type TerminalObject Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| type Ob (a :: FINHASK) Source Github # | |||||||||
| type C0 (k :: Kind) Source Github # | |||||||||
Defined in Proarrow.Category.Internal | |||||||||
| type C1 (k :: Kind) Source Github # | |||||||||
Defined in Proarrow.Category.Internal | |||||||||
| type (a :: FINHASK) ** (b :: FINHASK) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinHask | |||||||||
| type (a :: FINHASK) ~~> (b :: FINHASK) Source Github # | |||||||||
| type (n :: FINHASK) *. (a :: FINHASK) Source Github # | |||||||||
Defined in Proarrow.Colimit.Copower | |||||||||
| type (a :: FINHASK) ^ (n :: FINHASK) Source Github # | |||||||||
Defined in Proarrow.Limit.Power | |||||||||
| type ProObj FINHASK (p :: j +-> k) (a :: k) (b :: j) Source Github # | |||||||||
| type ('FH a :: FINHASK) || ('FH b :: FINHASK) Source Github # | |||||||||
| type ('FH a :: FINHASK) && ('FH b :: FINHASK) Source Github # | |||||||||
| type InitialObject Source Github # | |||||||||
Defined in Proarrow.Category.Instance.OpenHypergraph | |||||||||
| type (a :: SORTED s) || (b :: SORTED s) Source Github # | |||||||||
data FinHask (a :: FINHASK) (b :: FINHASK) where Source Github #
Constructors
| FinHask | |
Instances
| Promonad FinHask Source Github # | |
| Finitary FinHask Source Github # | The hom-sets of |
Defined in Proarrow.Category.Instance.FinHask Methods size :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => Natural Source Github # toIndex :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => FinHask a b -> Natural Source Github # fromIndex :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => Natural -> FinHask a b Source Github # elements :: forall (a :: FINHASK) (b :: FINHASK). (Ob a, Ob b) => [FinHask a b] Source Github # | |
| MonoidalProfunctor FinHask Source Github # | |
| Profunctor FinHask Source Github # | |
Defined in Proarrow.Category.Instance.FinHask Methods dimap :: forall (c :: FINHASK) (a :: FINHASK) (b :: FINHASK) (d :: FINHASK). (c ~> a) -> (b ~> d) -> FinHask a b -> FinHask c d Source Github # lmap :: forall (c :: FINHASK) (a :: FINHASK) (b :: FINHASK). (c ~> a) -> FinHask a b -> FinHask c b Source Github # rmap :: forall (b :: FINHASK) (d :: FINHASK) (a :: FINHASK). (b ~> d) -> FinHask a b -> FinHask a d Source Github # (\\) :: forall (a :: FINHASK) (b :: FINHASK) r. ((Ob a, Ob b) => r) -> FinHask a b -> r Source Github # | |
| Show (FinHask a b) Source Github # | |
| Eq (FinHask a b) Source Github # | |
| Ord (FinHask a b) Source Github # | |
Defined in Proarrow.Category.Instance.FinHask Methods compare :: FinHask a b -> FinHask a b -> Ordering Github # (<) :: FinHask a b -> FinHask a b -> Bool Github # (<=) :: FinHask a b -> FinHask a b -> Bool Github # (>) :: FinHask a b -> FinHask a b -> Bool Github # (>=) :: FinHask a b -> FinHask a b -> Bool Github # | |
| (Ob a, Ob b) => Finite (FinHask a b) Source Github # | |
| (Ob a, Ob b) => Universe (FinHask a b) Source Github # | |
Defined in Proarrow.Category.Instance.FinHask | |
(!) :: forall (a :: FINHASK) (b :: FINHASK). Ord (UN 'FH a) => FinHask a b -> UN 'FH a -> UN 'FH b Source Github #