Safe Haskell | None |
---|---|
Language | Haskell2010 |
Provides transformer categories for injective, surjective, and bijective functions.
TODO: Add Epic
, Monic
, and Iso
categories.
- class Concrete cat => Injective cat
- data InjectiveT cat a b
- unsafeProveInjective :: Concrete cat => cat a b -> InjectiveT cat a b
- class Concrete cat => Surjective cat
- data SurjectiveT cat a b
- unsafeProveSurjective :: Concrete cat => cat a b -> SurjectiveT cat a b
- class (Injective cat, Surjective cat) => Bijective cat
- data BijectiveT cat a b
- proveBijective :: (Injective cat, Surjective cat) => cat a b -> BijectiveT cat a b
- unsafeProveBijective :: Concrete cat => cat a b -> BijectiveT cat a b
Documentation
class Concrete cat => Injective cat Source
Injective (one-to-one) functions map every input to a unique output. See wikipedia for more detail.
Concrete cat => Injective (BijectiveT * * cat) Source | |
Concrete cat => Injective (InjectiveT * * cat) Source |
data InjectiveT cat a b Source
Category k cat => Category k (InjectiveT k k cat) Source | |
Sup (k -> k1 -> *) b a c => Sup (k -> k -> *) a (InjectiveT k k b) c Source | |
(<:) (k -> k1 -> *) subcat cat => (<:) (k -> k -> *) (InjectiveT k k subcat) cat Source | |
Sup (k -> k1 -> *) a b c => Sup (k -> k -> *) (InjectiveT k k a) b c Source | |
Concrete cat => Injective (InjectiveT * * cat) Source | |
type ValidCategory k (InjectiveT k k cat) a = ValidCategory k cat a Source |
unsafeProveInjective :: Concrete cat => cat a b -> InjectiveT cat a b Source
class Concrete cat => Surjective cat Source
Surjective (onto) functions can take on every value in the range. See wikipedia for more detail.
Concrete cat => Surjective (BijectiveT * * cat) Source | |
Concrete cat => Surjective (SurjectiveT * * cat) Source |
data SurjectiveT cat a b Source
Category k cat => Category k (SurjectiveT k k cat) Source | |
Sup (k -> k1 -> *) b a c => Sup (k -> k -> *) a (SurjectiveT k k b) c Source | |
(<:) (k -> k1 -> *) subcat cat => (<:) (k -> k -> *) (SurjectiveT k k subcat) cat Source | |
Sup (k -> k1 -> *) a b c => Sup (k -> k -> *) (SurjectiveT k k a) b c Source | |
Concrete cat => Surjective (SurjectiveT * * cat) Source | |
type ValidCategory k (SurjectiveT k k cat) a = ValidCategory k cat a Source |
unsafeProveSurjective :: Concrete cat => cat a b -> SurjectiveT cat a b Source
class (Injective cat, Surjective cat) => Bijective cat Source
Bijective functions are both injective and surjective. See wikipedia for more detail.
Concrete cat => Bijective (BijectiveT * * cat) Source |
data BijectiveT cat a b Source
Category k cat => Category k (BijectiveT k k cat) Source | |
Sup (k -> k1 -> *) b a c => Sup (k -> k -> *) a (BijectiveT k k b) c Source | |
(<:) (k -> k1 -> *) subcat cat => (<:) (k -> k -> *) (BijectiveT k k subcat) cat Source | |
Sup (k -> k1 -> *) a b c => Sup (k -> k -> *) (BijectiveT k k a) b c Source | |
Concrete cat => Bijective (BijectiveT * * cat) Source | |
Concrete cat => Surjective (BijectiveT * * cat) Source | |
Concrete cat => Injective (BijectiveT * * cat) Source | |
type ValidCategory k (BijectiveT k k cat) a = ValidCategory k cat a Source |
proveBijective :: (Injective cat, Surjective cat) => cat a b -> BijectiveT cat a b Source
unsafeProveBijective :: Concrete cat => cat a b -> BijectiveT cat a b Source