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 Source

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!

Methods

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

Instances

Semifunctor k1 k f c d => Semifunctor k k f (Dual k k c) (Dual k k d) 
Functor f => Semifunctor * * (WrappedFunctor * f) (->) (->) 
(Traversable1 f, Bind m) => Semifunctor * * (WrappedTraversable1 * f) (Kleisli m) (Kleisli m) 
(Traversable f, Bind m, Monad m) => Semifunctor * * (WrappedFunctor * f) (Kleisli m) (Kleisli m) 
Semifunctor * ((,) * *) (Bi * * Either) (Product * * * * (->) (->)) (->) 
Semifunctor * ((,) * *) (Bi * * (,)) (Product * * * * (->) (->)) (->) 
Bind m => Semifunctor * ((,) * *) (Bi * * Either) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) 
Bind m => Semifunctor * ((,) * *) (Bi * * (,)) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) 

data Bi p a where Source

Used to map a more traditional bifunctor into a semifunctor

Constructors

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

Instances

Disassociative * (->) (Bi * * Either) 
Disassociative * (->) (Bi * * (,)) 
Associative * (->) (Bi * * Either) 
Associative * (->) (Bi * * (,)) 
Symmetric * (->) (Bi * * Either) 
Symmetric * (->) (Bi * * (,)) 
Braided * (->) (Bi * * Either) 
Braided * (->) (Bi * * (,)) 
(Bind m, Monad m) => Disassociative * (Kleisli m) (Bi * * (,)) 
(Bind m, Monad m) => Disassociative * (Kleisli m) (Bi * * Either) 
(Bind m, Monad m) => Associative * (Kleisli m) (Bi * * (,)) 
(Bind m, Monad m) => Associative * (Kleisli m) (Bi * * Either) 
(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 * * (,)) 
(Bind m, Monad m) => Braided * (Kleisli m) (Bi * * Either) 
Semifunctor * ((,) * *) (Bi * * Either) (Product * * * * (->) (->)) (->) 
Semifunctor * ((,) * *) (Bi * * (,)) (Product * * * * (->) (->)) (->) 
Bind m => Semifunctor * ((,) * *) (Bi * * Either) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) 
Bind m => Semifunctor * ((,) * *) (Bi * * (,)) (Product * * * * (Kleisli m) (Kleisli m)) (Kleisli m) 

(#) :: a -> b -> Bi (,) `(a, b)` Source

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

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

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

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

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

data WrappedFunctor f a Source

Constructors

WrapFunctor 

Fields

unwrapFunctor :: f a
 

Instances

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

data WrappedTraversable1 f a Source

Constructors

WrapTraversable1 

Fields

unwrapTraversable1 :: f a
 

Instances