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 k k1 f c d => Semifunctor k k1 f (Dual k1 k1 c) (Dual k k d) # 

Methods

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

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

Methods

semimap :: c a b -> d ((->) a) ((->) 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) #

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

Methods

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

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

Methods

semimap :: c a b -> d ((->) a) ((->) 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) #

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

Disassociative * (->) (Bi * * Either) # 

Methods

disassociate :: Bi * * Either (p (((->), (->)) a (p (((->), (->)) b c)))) (p (((->), (->)) (p (((->), (->)) a b)) c)) #

Disassociative * (->) (Bi * * (,)) # 

Methods

disassociate :: Bi * * (,) (p (((->), (->)) a (p (((->), (->)) b c)))) (p (((->), (->)) (p (((->), (->)) a b)) c)) #

Associative * (->) (Bi * * Either) # 

Methods

associate :: Bi * * Either (p (((->), (->)) (p (((->), (->)) a b)) c)) (p (((->), (->)) a (p (((->), (->)) b c)))) #

Associative * (->) (Bi * * (,)) # 

Methods

associate :: Bi * * (,) (p (((->), (->)) (p (((->), (->)) a b)) c)) (p (((->), (->)) a (p (((->), (->)) b c)))) #

Symmetric * (->) (Bi * * Either) # 
Symmetric * (->) (Bi * * (,)) # 
Braided * (->) (Bi * * Either) # 

Methods

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

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

Methods

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

(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)) #

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

Methods

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

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

Methods

semimap :: c a b -> d ((->) a) ((->) 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) #

(#) :: 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

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

Methods

semimap :: c a b -> d ((->) a) ((->) 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) #

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) #