diff --git a/Control/Semigroupoid.hs b/Control/Semigroupoid.hs
new file mode 100644
--- /dev/null
+++ b/Control/Semigroupoid.hs
@@ -0,0 +1,30 @@
+module Control.Semigroupoid where
+
+import Prelude ()
+import qualified Control.Category as Base
+import Control.Category.Dual (Dual (..))
+import Data.Functor.Const (Const (..))
+import Data.Tagged (Tagged (..))
+
+-- | 'Category' sans 'id'
+--
+-- Laws:
+--
+-- * @f '.' (g '.' h) = (f '.' g) '.' h@
+class Semigroupoid κ where
+    (.) :: κ b c -> κ a b -> κ a c
+
+instance {-# OVERLAPPABLE #-} Base.Category κ => Semigroupoid κ where
+    (.) = (Base..)
+
+instance Semigroupoid (,) where
+    (_, c) . (a, _) = (a, c)
+
+instance Semigroupoid Const where
+    _ . Const a = Const a
+
+instance Semigroupoid Tagged where
+    Tagged c . _ = Tagged c
+
+instance Semigroupoid κ => Semigroupoid (Dual κ) where
+    Dual f . Dual g = Dual (g . f)
diff --git a/hs-functors.cabal b/hs-functors.cabal
--- a/hs-functors.cabal
+++ b/hs-functors.cabal
@@ -1,5 +1,5 @@
 name:                hs-functors
-version:             0.1.6.0
+version:             0.1.7.0
 synopsis:            Functors from products of Haskell and its dual to Haskell
 -- description:         
 license:             BSD3
@@ -22,6 +22,7 @@
                      , Control.Monad.Free
                      , Control.Monad.Morph
                      , Control.Monad.Trans.Compose
+                     , Control.Semigroupoid
                      , Data.Bicotraversable
                      , Data.Bifunctor.Biff
                      , Data.Bifunctor.Braided
@@ -35,6 +36,7 @@
   -- other-modules:       
   -- other-extensions:    
   build-depends:       base >=4.9 && <5
+                     , dual >=0.1.1 && <0.2
                      , tagged >=0.8.6 && <0.9
                      , transformers >=0.5.3 && <0.6
   -- hs-source-dirs:      
