packages feed

semigroupoid-extras 0.2.5 → 0.2.6

raw patch · 4 files changed

+63/−6 lines, 4 files

Files

Data/Semifunctor.hs view
@@ -93,6 +93,8 @@ instance Extend w => Semifunctor (Bi (,)) (Product (Cokleisli w) (Cokleisli w)) (Cokleisli w) where   semimap (Pair l r) = Cokleisli $ \p -> runCokleisli l (fstP <$> p) # runCokleisli r (sndP <$> p) +-- instance Extend w => Semifunctor (Bi Either)) (Product (Cokleisli w) (Cokleisli w)) (Cokleisli w) where+ semibimap :: Semifunctor p (Product l r) cod => l a b -> r c d -> cod (p (a,c)) (p (b,d)) semibimap f g = semimap (Pair f g) 
Data/Semifunctor/Associative.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, GADTs, ImplicitParams #-}+{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, GADTs #-} module Data.Semifunctor.Associative where  import Prelude hiding ((.), id)@@ -6,11 +6,7 @@ import Control.Comonad import Data.Functor.Bind import Data.Semifunctor--- import Data.Semigroupoid.Dual--- import Data.Semigroupoid.Product --- instance Semifunctor p (Product x y) z => Semifunctor (DualSemibifunctor p) (Product (Dual x) (Dual y)) (Dual z) where- class Semifunctor p (Product k k) k => Associative k p where   associate :: k (p(p(a,b),c)) (p(a,p(b,c))) @@ -36,6 +32,8 @@  instance Comonad m => Associative (Cokleisli m) (Bi (,)) where   associate = cokleisliAssociate++-- instance Comonad m => Associative (Cokleisli m) (Bi Either) where associate = cokleisliAssociate  -- instance Disassociative k p => Associative (Dual k) p -- instance (Monad m, Semifunctor p (Product (Kleisli m) (Kleisli m) (Kleisli m), Associative (->) p) => Associative (Kleisli m) p) where associate = kleisliAssociate
+ Data/Semifunctor/Braided.hs view
@@ -0,0 +1,56 @@+{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts, FlexibleInstances, GADTs #-}+module Data.Semifunctor.Braided +  ( Braided(..)+  , kleisliBraid+  , cokleisliBraid+  , Symmetric+  , swap+  ) where++import Prelude hiding ((.), id)+import Control.Arrow+import Control.Comonad+import Data.Functor.Bind+import Data.Semifunctor+import Data.Semifunctor.Associative+-- import Data.Semigroupoid.Dual++class Associative k p => Braided k p where+  braid :: k (p(a,b)) (p(b,a))++-- instance Braided k p => Braided (Dual k) p where braid = Dual braid++instance Braided (->) (Bi Either) where+  braid (Bi (Left a)) = Bi (Right a)+  braid (Bi (Right a)) = Bi (Left a)++instance Braided (->) (Bi (,)) where+  braid (Bi (a,b)) = Bi (b,a)++kleisliBraid :: (Monad m, Semifunctor p (Product (Kleisli m) (Kleisli m)) (Kleisli m), Braided (->) p) => Kleisli m (p(a,b)) (p(b,a))+kleisliBraid = Kleisli (return . braid)++instance (Bind m, Monad m) => Braided (Kleisli m) (Bi Either) where+  braid = kleisliBraid++instance (Bind m, Monad m) => Braided (Kleisli m) (Bi (,)) where+  braid = kleisliBraid++cokleisliBraid :: (Comonad w, Semifunctor p (Product (Cokleisli w) (Cokleisli w)) (Cokleisli w), Braided (->) p) => Cokleisli w (p(a,b)) (p(b,a))+cokleisliBraid = Cokleisli (braid . extract)++instance Comonad w => Braided (Cokleisli w) (Bi (,)) where+  braid = cokleisliBraid++-- instance Comonad w => Braided (Cokleisli w) (Bi Either) where braid = cokleisliBraid++class Braided k p => Symmetric k p+instance Symmetric (->) (Bi Either) +instance Symmetric (->) (Bi (,))+instance (Bind m, Monad m) => Symmetric (Kleisli m) (Bi Either)+instance (Bind m, Monad m) => Symmetric (Kleisli m) (Bi (,))+instance Comonad w => Symmetric (Cokleisli w) (Bi (,))+-- instance Comonad w => Symmetric (Cokleisli w) (Bi Either)++swap :: Symmetric k p => k (p(a,b)) (p(b,a))+swap = braid
semigroupoid-extras.cabal view
@@ -1,6 +1,6 @@ name:          semigroupoid-extras category:      Control-version:       0.2.5+version:       0.2.6 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE@@ -28,6 +28,7 @@   exposed-modules:     Data.Semifunctor     Data.Semifunctor.Associative+    Data.Semifunctor.Braided     Data.Semigroupoid.Ob     Data.Semigroupoid.Product     Data.Semigroupoid.Coproduct