{-# LANGUAGE CPP #-}{-# LANGUAGE GADTs #-}{-# LANGUAGE PolyKinds #-}{-# LANGUAGE Trustworthy #-}------------------------------------------------------------------------------- |-- Module : Data.Semigroupoid-- Copyright : (C) 2007-2015 Edward Kmett-- License : BSD-style (see the file LICENSE)---- Maintainer : Edward Kmett <ekmett@gmail.com>-- Stability : provisional-- Portability : portable---- A semigroupoid satisfies all of the requirements to be a Category except-- for the existence of identity arrows.----------------------------------------------------------------------------moduleData.Semigroupoid(Semigroupoid (..),WrappedCategory (..),Semi (..))whereimportControl.ApplicativeimportControl.ArrowimportControl.CategoryimportData.Functor.Bind importData.SemigroupimportqualifiedData.Type.CoercionasCoimportqualifiedData.Type.EqualityasEqimportPreludehiding(id,(.))
#ifdef MIN_VERSION_contravariant
importData.Functor.Contravariant
#endif

#ifdef MIN_VERSION_comonad
importData.Functor.Extend importControl.Comonad
#endif

#ifdef MIN_VERSION_tagged
importData.Tagged(Tagged(..))
#endif
-- | 'Control.Category.Category' sans 'Control.Category.id'classSemigroupoid c whereo ::c j k ->c i j ->c i k instanceSemigroupoid (->)whereo :: forall j k i. (j -> k) -> (i -> j) -> i -> k
o =(j -> k) -> (i -> j) -> i -> k
forall j k i. (j -> k) -> (i -> j) -> i -> k
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
(.)-- | <http://en.wikipedia.org/wiki/Band_(mathematics)#Rectangular_bands>instanceSemigroupoid (,)whereo :: forall j k i. (j, k) -> (i, j) -> (i, k)
o (j
_,k
k )(i
i ,j
_)=(i
i ,k
k )instanceBind m =>Semigroupoid (Kleislim )whereKleislij -> m k
g o :: forall j k i. Kleisli m j k -> Kleisli m i j -> Kleisli m i k
`o` Kleislii -> m j
f =(i -> m k) -> Kleisli m i k
forall (m :: * -> *) a b. (a -> m b) -> Kleisli m a b
Kleisli((i -> m k) -> Kleisli m i k) -> (i -> m k) -> Kleisli m i k
forall a b. (a -> b) -> a -> b
$\i
a ->i -> m j
f i
a m j -> (j -> m k) -> m k
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Bind m => m a -> (a -> m b) -> m b
>>- j -> m k
g 
#ifdef MIN_VERSION_comonad
instanceExtend w =>Semigroupoid (Cokleisliw )whereCokleisliw j -> k
f o :: forall j k i. Cokleisli w j k -> Cokleisli w i j -> Cokleisli w i k
`o` Cokleisliw i -> j
g =(w i -> k) -> Cokleisli w i k
forall {k} (w :: k -> *) (a :: k) b. (w a -> b) -> Cokleisli w a b
Cokleisli((w i -> k) -> Cokleisli w i k) -> (w i -> k) -> Cokleisli w i k
forall a b. (a -> b) -> a -> b
$w j -> k
f (w j -> k) -> (w i -> w j) -> w i -> k
forall j k i. (j -> k) -> (i -> j) -> i -> k
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.(w i -> j) -> w i -> w j
forall a b. (w a -> b) -> w a -> w b
forall (w :: * -> *) a b. Extend w => (w a -> b) -> w a -> w b
extended w i -> j
g 
#endif

#ifdef MIN_VERSION_contravariant
instanceSemigroupoid OpwhereOpk -> j
f o :: forall j k i. Op j k -> Op i j -> Op i k
`o` Opj -> i
g =(k -> i) -> Op i k
forall a b. (b -> a) -> Op a b
Op(j -> i
g (j -> i) -> (k -> j) -> k -> i
forall j k i. (j -> k) -> (i -> j) -> i -> k
forall {k} (c :: k -> k -> *) (j :: k) (k :: k) (i :: k).
Semigroupoid c =>
c j k -> c i j -> c i k
`o` k -> j
f )
#endif
newtypeWrappedCategory k a b =WrapCategory {forall {k} {k} (k :: k -> k -> *) (a :: k) (b :: k).
WrappedCategory k a b -> k a b
unwrapCategory ::k a b }instanceCategoryk =>Semigroupoid (WrappedCategory k )whereWrapCategory k j k
f o :: forall (j :: k) (k :: k) (i :: k).
WrappedCategory k j k
-> WrappedCategory k i j -> WrappedCategory k i k
`o` WrapCategory k i j
g =k i k -> WrappedCategory k i k
forall {k} {k} (k :: k -> k -> *) (a :: k) (b :: k).
k a b -> WrappedCategory k a b
WrapCategory (k j k
f k j k -> k i j -> k i k
forall (b :: k) (c :: k) (a :: k). k b c -> k a b -> k a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.k i j
g )instanceCategoryk =>Category(WrappedCategory k )whereid :: forall (a :: k). WrappedCategory k a a
id=k a a -> WrappedCategory k a a
forall {k} {k} (k :: k -> k -> *) (a :: k) (b :: k).
k a b -> WrappedCategory k a b
WrapCategory k a a
forall (a :: k). k a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
idWrapCategory k b c
f . :: forall (b :: k) (c :: k) (a :: k).
WrappedCategory k b c
-> WrappedCategory k a b -> WrappedCategory k a c
.WrapCategory k a b
g =k a c -> WrappedCategory k a c
forall {k} {k} (k :: k -> k -> *) (a :: k) (b :: k).
k a b -> WrappedCategory k a b
WrapCategory (k b c
f k b c -> k a b -> k a c
forall (b :: k) (c :: k) (a :: k). k b c -> k a b -> k a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.k a b
g )newtypeSemi m a b =Semi {forall {k} {k} m (a :: k) (b :: k). Semi m a b -> m
getSemi ::m }instanceSemigroupm =>Semigroupoid (Semi m )whereSemi m
m o :: forall (j :: k) (k :: k) (i :: k).
Semi m j k -> Semi m i j -> Semi m i k
`o` Semi m
n =m -> Semi m i k
forall {k} {k} m (a :: k) (b :: k). m -> Semi m a b
Semi (m
m m -> m -> m
forall a. Semigroup a => a -> a -> a
<>m
n )instanceMonoidm =>Category(Semi m )whereid :: forall (a :: k). Semi m a a
id=m -> Semi m a a
forall {k} {k} m (a :: k) (b :: k). m -> Semi m a b
Semi m
forall a. Monoid a => a
memptySemi m
m . :: forall (b :: k) (c :: k) (a :: k).
Semi m b c -> Semi m a b -> Semi m a c
.Semi m
n =m -> Semi m a c
forall {k} {k} m (a :: k) (b :: k). m -> Semi m a b
Semi (m
m m -> m -> m
forall a. Monoid a => a -> a -> a
`mappend`m
n )instanceSemigroupoid ConstwhereConst j k
_o :: forall j k i. Const j k -> Const i j -> Const i k
`o` Consti
a =i -> Const i k
forall {k} a (b :: k). a -> Const a b
Consti
a 
#ifdef MIN_VERSION_tagged
instanceSemigroupoid TaggedwhereTaggedk
b o :: forall j k i. Tagged j k -> Tagged i j -> Tagged i k
`o` Tagged i j
_=k -> Tagged i k
forall {k} (s :: k) b. b -> Tagged s b
Taggedk
b 
#endif
instanceSemigroupoid Co.Coercionwhereo :: forall (j :: k) (k :: k) (i :: k).
Coercion j k -> Coercion i j -> Coercion i k
o =(Coercion i j -> Coercion j k -> Coercion i k)
-> Coercion j k -> Coercion i j -> Coercion i k
forall a b c. (a -> b -> c) -> b -> a -> c
flipCoercion i j -> Coercion j k -> Coercion i k
forall {k} (a :: k) (b :: k) (c :: k).
Coercion a b -> Coercion b c -> Coercion a c
Co.transinstanceSemigroupoid (Eq.:~:)whereo :: forall (j :: k) (k :: k) (i :: k).
(j :~: k) -> (i :~: j) -> i :~: k
o =((i :~: j) -> (j :~: k) -> i :~: k)
-> (j :~: k) -> (i :~: j) -> i :~: k
forall a b c. (a -> b -> c) -> b -> a -> c
flip(i :~: j) -> (j :~: k) -> i :~: k
forall {k} (a :: k) (b :: k) (c :: k).
(a :~: b) -> (b :~: c) -> a :~: c
Eq.trans
#if MIN_VERSION_base(4,10,0)
instanceSemigroupoid (Eq.:~~:)whereo :: forall (j :: k) (k :: k) (i :: k).
(j :~~: k) -> (i :~~: j) -> i :~~: k
o j :~~: k
Eq.HRefli :~~: j
Eq.HRefl=i :~~: k
i :~~: i
forall {k1} (a :: k1). a :~~: a
Eq.HRefl
#endif

AltStyle によって変換されたページ (->オリジナル) /