semigroupoid-extras-5: Semigroupoids that depend on PolyKinds

Copyright(C) 2011-2015 Edward Kmett
LicenseBSD-style (see the file LICENSE)
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityprovisional
Portabilitypolykinds
Safe HaskellTrustworthy
LanguageHaskell98

Data.Semifunctor

Description

 

Synopsis

Documentation

class (Semigroupoid c, Semigroupoid d) => Semifunctor f c d | f c -> d, f d -> c where #

Semifunctors map objects to objects, and arrows to arrows preserving connectivity as normal functors, but do not purport to preserve identity arrows. We apply them to semigroupoids, because those don't even claim to offer identity arrows!

Minimal complete definition

semimap

Methods

semimap :: c a b -> d (f a) (f b) #

Instances

Semifunctor k1 k2 f c d => Semifunctor k1 k2 f (Dual k1 k1 c) (Dual k2 k2 d) # 

Methods

semimap :: c a b -> d (Dual k2 k2 d a) (Dual k2 k2 d b) #

(Traversable1 f, Bind m) => Semifunctor * * (WrappedTraversable1 * f) (Kleisli m) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

(Traversable f, Bind m, Monad m) => Semifunctor * * (WrappedFunctor * f) (Kleisli m) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

Functor f => Semifunctor * * (WrappedFunctor * f) ((->) LiftedRep LiftedRep) ((->) LiftedRep LiftedRep) # 

Methods

semimap :: c a b -> d ((LiftedRep -> LiftedRep) a) ((LiftedRep -> LiftedRep) b) #

Bind m => Semifunctor (*, *) * (Bi * * Either) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

Bind m => Semifunctor (*, *) * (Bi * * (,)) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

Semifunctor (*, *) * (Bi * * Either) (Product * * * * ((->) LiftedRep LiftedRep) ((->) LiftedRep LiftedRep)) ((->) LiftedRep LiftedRep) # 

Methods

semimap :: c a b -> d ((LiftedRep -> LiftedRep) a) ((LiftedRep -> LiftedRep) b) #

Semifunctor (*, *) * (Bi * * (,)) (Product * * * * ((->) LiftedRep LiftedRep) ((->) LiftedRep LiftedRep)) ((->) LiftedRep LiftedRep) # 

Methods

semimap :: c a b -> d ((LiftedRep -> LiftedRep) a) ((LiftedRep -> LiftedRep) b) #

data Bi p a where #

Used to map a more traditional bifunctor into a semifunctor

Constructors

Bi :: p a b -> Bi p '(a, b) 

Instances

(Bind m, Monad m) => Disassociative * (Kleisli m) (Bi * * (,)) # 

Methods

disassociate :: Bi * * (,) (p ((Kleisli m, Kleisli m) a (p ((Kleisli m, Kleisli m) b c)))) (p ((Kleisli m, Kleisli m) (p ((Kleisli m, Kleisli m) a b)) c)) #

(Bind m, Monad m) => Disassociative * (Kleisli m) (Bi * * Either) # 

Methods

disassociate :: Bi * * Either (p ((Kleisli m, Kleisli m) a (p ((Kleisli m, Kleisli m) b c)))) (p ((Kleisli m, Kleisli m) (p ((Kleisli m, Kleisli m) a b)) c)) #

(Bind m, Monad m) => Associative * (Kleisli m) (Bi * * (,)) # 

Methods

associate :: Bi * * (,) (p ((Kleisli m, Kleisli m) (p ((Kleisli m, Kleisli m) a b)) c)) (p ((Kleisli m, Kleisli m) a (p ((Kleisli m, Kleisli m) b c)))) #

(Bind m, Monad m) => Associative * (Kleisli m) (Bi * * Either) # 

Methods

associate :: Bi * * Either (p ((Kleisli m, Kleisli m) (p ((Kleisli m, Kleisli m) a b)) c)) (p ((Kleisli m, Kleisli m) a (p ((Kleisli m, Kleisli m) b c)))) #

(Bind m, Monad m) => Symmetric * (Kleisli m) (Bi * * (,)) # 
(Bind m, Monad m) => Symmetric * (Kleisli m) (Bi * * Either) # 
(Bind m, Monad m) => Braided * (Kleisli m) (Bi * * (,)) # 

Methods

braid :: Bi * * (,) (p ((Kleisli m, Kleisli m) a b)) (p ((Kleisli m, Kleisli m) b a)) #

(Bind m, Monad m) => Braided * (Kleisli m) (Bi * * Either) # 

Methods

braid :: Bi * * Either (p ((Kleisli m, Kleisli m) a b)) (p ((Kleisli m, Kleisli m) b a)) #

Disassociative * ((->) LiftedRep LiftedRep) (Bi * * Either) # 
Disassociative * ((->) LiftedRep LiftedRep) (Bi * * (,)) # 
Associative * ((->) LiftedRep LiftedRep) (Bi * * Either) # 
Associative * ((->) LiftedRep LiftedRep) (Bi * * (,)) # 
Symmetric * ((->) LiftedRep LiftedRep) (Bi * * Either) # 
Symmetric * ((->) LiftedRep LiftedRep) (Bi * * (,)) # 
Braided * ((->) LiftedRep LiftedRep) (Bi * * Either) # 

Methods

braid :: Bi * * Either (p ((LiftedRep -> LiftedRep, LiftedRep -> LiftedRep) a b)) (p ((LiftedRep -> LiftedRep, LiftedRep -> LiftedRep) b a)) #

Braided * ((->) LiftedRep LiftedRep) (Bi * * (,)) # 

Methods

braid :: Bi * * (,) (p ((LiftedRep -> LiftedRep, LiftedRep -> LiftedRep) a b)) (p ((LiftedRep -> LiftedRep, LiftedRep -> LiftedRep) b a)) #

Bind m => Semifunctor (*, *) * (Bi * * Either) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

Bind m => Semifunctor (*, *) * (Bi * * (,)) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

Semifunctor (*, *) * (Bi * * Either) (Product * * * * ((->) LiftedRep LiftedRep) ((->) LiftedRep LiftedRep)) ((->) LiftedRep LiftedRep) # 

Methods

semimap :: c a b -> d ((LiftedRep -> LiftedRep) a) ((LiftedRep -> LiftedRep) b) #

Semifunctor (*, *) * (Bi * * (,)) (Product * * * * ((->) LiftedRep LiftedRep) ((->) LiftedRep LiftedRep)) ((->) LiftedRep LiftedRep) # 

Methods

semimap :: c a b -> d ((LiftedRep -> LiftedRep) a) ((LiftedRep -> LiftedRep) b) #

(#) :: a -> b -> Bi (,) '(a, b) #

semibimap :: Semifunctor p (Product l r) cod => l a b -> r c d -> cod (p '(a, c)) (p '(b, d)) #

semifirst :: (Semifunctor p (Product l r) cod, Ob r c) => l a b -> cod (p '(a, c)) (p '(b, c)) #

semisecond :: (Semifunctor p (Product l r) cod, Ob l a) => r b c -> cod (p '(a, b)) (p '(a, c)) #

first :: (Semifunctor p (Product l r) cod, Category r) => l a b -> cod (p '(a, c)) (p '(b, c)) #

second :: (Semifunctor p (Product l r) cod, Category l) => r b c -> cod (p '(a, b)) (p '(a, c)) #

data WrappedFunctor f a #

Constructors

WrapFunctor 

Fields

Instances

(Traversable f, Bind m, Monad m) => Semifunctor * * (WrappedFunctor * f) (Kleisli m) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #

Functor f => Semifunctor * * (WrappedFunctor * f) ((->) LiftedRep LiftedRep) ((->) LiftedRep LiftedRep) # 

Methods

semimap :: c a b -> d ((LiftedRep -> LiftedRep) a) ((LiftedRep -> LiftedRep) b) #

data WrappedTraversable1 f a #

Constructors

WrapTraversable1 

Fields

Instances

(Traversable1 f, Bind m) => Semifunctor * * (WrappedTraversable1 * f) (Kleisli m) (Kleisli m) # 

Methods

semimap :: c a b -> d (Kleisli m a) (Kleisli m b) #