subhask-0.1.0.0: Type safe interface for programming in subcategories of Hask

Safe HaskellNone
LanguageHaskell2010

SubHask.Category.Trans.Bijective

Description

Provides transformer categories for injective, surjective, and bijective functions.

TODO: Add Epic, Monic, and Iso categories.

Synopsis

Documentation

class Concrete cat => Injective cat Source

Injective (one-to-one) functions map every input to a unique output. See wikipedia for more detail.

Instances

Concrete cat => Injective (BijectiveT * * cat) Source 
Concrete cat => Injective (InjectiveT * * cat) Source 

data InjectiveT cat a b Source

Instances

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.

Instances

data SurjectiveT cat a b Source

Instances

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.

Instances

Concrete cat => Bijective (BijectiveT * * cat) Source 

data BijectiveT cat a b Source

Instances

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