diff --git a/DeepControl/Arrow.hs b/DeepControl/Arrow.hs
--- a/DeepControl/Arrow.hs
+++ b/DeepControl/Arrow.hs
@@ -33,7 +33,7 @@
 
 instance (Monad m1, Monad m2, Traversable m2) => Category (Kleisli2 m1 m2) where
     id = Kleisli2 $ (.**) 
-    (Kleisli2 g) . (Kleisli2 f) = Kleisli2 $ f >==> g
+    (Kleisli2 g) . (Kleisli2 f) = Kleisli2 $ f >>=> g
 
 instance (Monad m1, Monad m2, Traversable m2) => Arrow (Kleisli2 m1 m2) where
     arr f = Kleisli2 $ (.**) . f
@@ -47,12 +47,12 @@
 
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => Category (Kleisli3 m1 m2 m3) where
     id = Kleisli3 $ (.***) 
-    (Kleisli3 g) . (Kleisli3 f) = Kleisli3 $ f >===> g
+    (Kleisli3 g) . (Kleisli3 f) = Kleisli3 $ f >>>=> g
 
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => Arrow (Kleisli3 m1 m2 m3) where
     arr f = Kleisli3 $ (.***) . f
-    first (Kleisli3 f) = Kleisli3 $ \ ~(b,d) -> f b >>>== \c -> (.***) (c,d)
-    second (Kleisli3 f) = Kleisli3 $ \ ~(d,b) -> f b >>>== \c -> (.***) (d,c)
+    first (Kleisli3 f) = Kleisli3 $ \ ~(b,d) -> f b >>>= \c -> (.***) (c,d)
+    second (Kleisli3 f) = Kleisli3 $ \ ~(d,b) -> f b >>>= \c -> (.***) (d,c)
 
 ----------------------------------------------------------------------
 -- Kleisli4
@@ -61,12 +61,12 @@
 
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => Category (Kleisli4 m1 m2 m3 m4) where
     id = Kleisli4 $ (.****) 
-    (Kleisli4 g) . (Kleisli4 f) = Kleisli4 $ f >====> g
+    (Kleisli4 g) . (Kleisli4 f) = Kleisli4 $ f >>>>=> g
 
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => Arrow (Kleisli4 m1 m2 m3 m4) where
     arr f = Kleisli4 $ (.****) . f
-    first (Kleisli4 f) = Kleisli4 $ \ ~(b,d) -> f b >>>>== \c -> (.****) (c,d)
-    second (Kleisli4 f) = Kleisli4 $ \ ~(d,b) -> f b >>>>== \c -> (.****) (d,c)
+    first (Kleisli4 f) = Kleisli4 $ \ ~(b,d) -> f b >>>>= \c -> (.****) (c,d)
+    second (Kleisli4 f) = Kleisli4 $ \ ~(d,b) -> f b >>>>= \c -> (.****) (d,c)
 
 ----------------------------------------------------------------------
 -- Kleisli5
@@ -75,10 +75,10 @@
 
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => Category (Kleisli5 m1 m2 m3 m4 m5) where
     id = Kleisli5 $ (.*****)
-    (Kleisli5 g) . (Kleisli5 f) = Kleisli5 $ f >=====> g
+    (Kleisli5 g) . (Kleisli5 f) = Kleisli5 $ f >>>>>=> g
 
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => Arrow (Kleisli5 m1 m2 m3 m4 m5) where
     arr f = Kleisli5 $ (.*****) . f
-    first (Kleisli5 f) = Kleisli5 $ \ ~(b,d) -> f b >>>>>== \c -> (.*****) (c,d)
-    second (Kleisli5 f) = Kleisli5 $ \ ~(d,b) -> f b >>>>>== \c -> (.*****) (d,c)
+    first (Kleisli5 f) = Kleisli5 $ \ ~(b,d) -> f b >>>>>= \c -> (.*****) (c,d)
+    second (Kleisli5 f) = Kleisli5 $ \ ~(d,b) -> f b >>>>>= \c -> (.*****) (d,c)
 
diff --git a/DeepControl/Monad.hs b/DeepControl/Monad.hs
--- a/DeepControl/Monad.hs
+++ b/DeepControl/Monad.hs
@@ -28,7 +28,7 @@
     -- * Level-0
     -- ** bind 
     (-<), (>-), 
-    -- ** composite 
+    -- ** fish 
     (>->), (<-<),
 
     -- * Level-2
@@ -37,57 +37,57 @@
     -- ** sequence
     (>>~), 
     -- ** cover-bind
-    (>-==), (->==), 
+    (>-=), (->=), 
     -- ** cover-sequence
     (>-~), (->~),
-    -- ** composite 
-    (>==>), 
+    -- ** fish 
+    (>>=>), 
 
     -- * Level-3
     -- ** bind
-    (>>>==), 
+    (>>>=), 
     -- ** sequence
     (>>>~),
     -- ** cover-bind 
-    (>>-==), (->>==), (>->==) ,(>--==),(->-==), (-->==), 
+    (>>-=), (->>=), (>->=) ,(>--=),(->-=), (-->=), 
     -- ** cover-sequence 
     (>--~), (->-~), (-->~), (>>-~), (->>~), (>->~), 
-    -- ** composite 
-    (>===>),
+    -- ** fish 
+    (>>>=>),
 
     -- * Level-4
     -- ** bind
-    (>>>>==), 
+    (>>>>=), 
     -- ** sequence
     (>>>>~), 
     -- ** cover-bind 
-    (--->==), (-->-==), (->--==), (>---==),
-    (-->>==), (->->==), (>-->==), (>->-==), (->>-==), (>>--==),
-    (->>>==), (>->>==), (>>->==), (>>>-==),
+    (--->=), (-->-=), (->--=), (>---=),
+    (-->>=), (->->=), (>-->=), (>->-=), (->>-=), (>>--=),
+    (->>>=), (>->>=), (>>->=), (>>>-=),
     -- ** cover-sequence 
     (--->~), (-->-~), (->--~), (>---~),
     (-->>~), (->->~), (>-->~), (>->-~), (->>-~), (>>--~),
     (->>>~), (>->>~), (>>->~), (>>>-~),
-    -- ** composite 
-    (>====>), 
+    -- ** fish 
+    (>>>>=>), 
 
     -- * Level-5
     -- ** bind
-    (>>>>>==), 
+    (>>>>>=), 
     -- ** sequence
     (>>>>>~), 
     -- ** cover-bind 
-    (---->==), (--->-==), (-->--==), (->---==), (>----==),
-    (--->>==), (-->->==), (->-->==), (>--->==), (>-->-==), (->->-==), (-->>-==), (->>--==), (>->--==), (>>---==),
-    (-->>>==), (->->>==), (>-->>==), (>->->==), (->>->==), (>>-->==), (>>->-==), (>->>-==), (->>>-==), (>>>--==),
-    (->>>>==), (>->>>==), (>>->>==), (>>>->==), (>>>>-==),
+    (---->=), (--->-=), (-->--=), (->---=), (>----=),
+    (--->>=), (-->->=), (->-->=), (>--->=), (>-->-=), (->->-=), (-->>-=), (->>--=), (>->--=), (>>---=),
+    (-->>>=), (->->>=), (>-->>=), (>->->=), (->>->=), (>>-->=), (>>->-=), (>->>-=), (->>>-=), (>>>--=),
+    (->>>>=), (>->>>=), (>>->>=), (>>>->=), (>>>>-=),
     -- ** cover-sequence 
     (---->~), (--->-~), (-->--~), (->---~), (>----~),
     (--->>~), (-->->~), (->-->~), (>--->~), (>-->-~), (->->-~), (-->>-~), (->>--~), (>->--~), (>>---~),
     (-->>>~), (->->>~), (>-->>~), (>->->~), (->>->~), (>>-->~), (>>->-~), (>->>-~), (->>>-~), (>>>--~),
     (->>>>~), (>->>>~), (>>->>~), (>>>->~), (>>>>-~),
-    -- ** composite 
-    (>=====>), 
+    -- ** fish 
+    (>>>>>=>), 
 
     ) where 
 
@@ -100,13 +100,13 @@
 -- Level-0 functions
 
 infixl 1  -<, >-
--- | Anologous for @'$'@, but (-<) is left associative.
+-- | Anologous to @'$'@, but (-<) is left associative.
 --
 -- >>> Just -< 3
 -- Just 3
 (-<) :: (a -> b) -> a -> b
 (-<) = ($)
--- | The auguments-flipped function for @'-<'@.
+-- | The auguments-flipped function of @'-<'@.
 --
 -- >>> 3 >- Just
 -- Just 3
@@ -114,7 +114,7 @@
 -- >>> :{
 -- let plus :: Int -> Int -> Int
 --     plus x y = 
---         x >- \a ->  -- (>-) is the level-0 bind function, analogous for (>>=)
+--         x >- \a ->  -- (>-) is the level-0 bind function, analogous to (>>==)
 --         y >- \b ->
 --         a + b
 -- in plus 3 4
@@ -125,13 +125,13 @@
 (>-) = flip (-<)
 
 infixr 1  <-<, >->
--- | Anologous for @'.'@, but the infix preference is low.
+-- | Anologous to @'.'@, but the infix preference is low.
 --
 -- >>> ((3+) <-< (2*) <-< (1+)) -< 1
 -- 7
 (<-<) :: (b -> c) -> (a -> b) -> a -> c
 (<-<) = (.)
--- | The auguments-flipped function for @'<-<'@. 
+-- | The auguments-flipped function of @'<-<'@. 
 --
 -- >>> 1 >- ((+1) >-> (*2) >-> (+3))
 -- 7
@@ -144,16 +144,16 @@
 -------------------------------------------------------------------------------
 -- Level-2 functions
 
-infixr 1  >==>
+infixr 1  >>=>
 infixr 1  >>==, >>~
-infixr 1  ->==, >-==
+infixr 1  ->=, >-=
 infixr 1  ->~, >-~
 
--- | The level-2 bind function, analogous for @'>>='@.
+-- | The level-2 bind function, analogous to @'>>='@.
 -- 
 -- >>> :{
 --  -- List-List monad
---  [["a","b"]] >>== \x ->   -- (>>==) is the level-2 bind function, analogous for (>>=)
+--  [["a","b"]] >>== \x ->   -- (>>==) is the level-2 bind function, analogous to (>>==)
 --  [[0],[1,2]] >>== \y -> 
 --  (.**) (x ++ show y)
 -- :}
@@ -175,30 +175,30 @@
 (>>==) :: (Monad m1, Monad m2, Traversable m2) => m1 (m2 a) -> (a -> m1 (m2 b)) -> m1 (m2 b)
 m >>== f = m >>= \x -> join |$> (sink $ f |$> x)
 
--- | The level-2 composite function, analogous for @'>=>'@.
-(>==>) :: (Monad m1, Monad m2, Traversable m2) => (a -> m1 (m2 b)) -> (b -> m1 (m2 c)) -> a -> m1 (m2 c)
-f >==> g = \x -> f x >>== g
--- | The level-2 sequence function, analogous for @'>>'@.
+-- | The level-2 fish function, analogous to @'>=>'@.
+(>>=>) :: (Monad m1, Monad m2, Traversable m2) => (a -> m1 (m2 b)) -> (b -> m1 (m2 c)) -> a -> m1 (m2 c)
+f >>=> g = \x -> f x >>== g
+-- | The level-2 sequence function, analogous to @'>>'@.
 --
---   Definition: @ m >>~ f = m >>== \\_ -> f @
+--   Definition: @ m >>~ f = m >>= \\_ -> f @
 (>>~) :: (Monad m1, Monad m2, Traversable m2) => m1 (m2 a) -> m1 (m2 b) -> m1 (m2 b)
 m >>~ f = m >>== \_ -> f
--- | A level-2 cover-bind function, analogous for @'>>='@.
+-- | A level-2 cover-bind function, analogous to @'>>='@.
 --
---   Definition: @ m >-== f = (-*) m >>== f @
-(>-==) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
-m >-== f = (-*) m >>== f
--- | A level-2 cover-bind function, analogous for @'>>='@.
+--   Definition: @ m >-= f = (-*) m >>= f @
+(>-=) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
+m >-= f = (-*) m >>== f
+-- | A level-2 cover-bind function, analogous to @'>>='@.
 --
---   Definition: @ m ->== f = (.*) m >>== f @
-(->==) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
-m ->== f = (.*) m >>== f
--- | A level-2 cover-sequence function, analogous for @'>>'@.
+--   Definition: @ m ->= f = (.*) m >>= f @
+(->=) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> (a -> m1 (m2 b)) -> m1 (m2 b)
+m ->= f = (.*) m >>== f
+-- | A level-2 cover-sequence function, analogous to @'>>'@.
 --
 --   Definition: @ m >-~ f = (-*) m >>~ f @
 (>-~) :: (Monad m1, Monad m2, Traversable m2) => m1 a -> m1 (m2 b) -> m1 (m2 b)
 m >-~ f = (-*) m >>~ f
--- | A level-2 cover-sequence function, analogous for @'>>'@.
+-- | A level-2 cover-sequence function, analogous to @'>>'@.
 --
 --   Definition: @ m ->~ f = (.*) m >>~ f @
 (->~) :: (Monad m1, Monad m2, Traversable m2) => m2 a -> m1 (m2 b) -> m1 (m2 b)
@@ -207,18 +207,18 @@
 -------------------------------------------------------------------------------
 -- Level-3 functions
 
-infixr 1  >===>
-infixr 1  >>>==, >>>~
-infixr 1  >--==, ->-==, -->==, >>-==, >->==, ->>==
+infixr 1  >>>=>
+infixr 1  >>>=, >>>~
+infixr 1  >--=, ->-=, -->=, >>-=, >->=, ->>=
 infixr 1  >--~, ->-~, -->~, >>-~, >->~, ->>~
 
--- | The level-3 bind function, analogous for @'>>='@.
+-- | The level-3 bind function, analogous to @'>>='@.
 -- 
 -- >>> :{
 --  -- IO-List-List monad
---  (.*) [["a","b"]] >>>== \x ->   -- (>>>==) is the level-3 bind function, analogous for (>>=)
---  (.*) [[0],[1,2]] >>>== \y ->
---  (-**) (print (x,y)) >>>~       -- (>>>~) is the level-3 sequence function, analogous for (>>)
+--  (.*) [["a","b"]] >>>= \x ->   -- (>>>=) is the level-3 bind function, analogous to (>>==)
+--  (.*) [[0],[1,2]] >>>= \y ->
+--  (-**) (print (x,y)) >>>~      -- (>>>~) is the level-3 sequence function, analogous to (>>)
 --  (.***) (x ++ show y)
 -- :}
 -- ("a",0)
@@ -233,9 +233,9 @@
 --
 -- >>> :{
 --  -- IO-List-List monad
---  [["a","b"]] ->>== \x ->   -- (->>==) is a level-3 cover-bind function, analogous for (>>=)
---  [[0],[1,2]] ->>== \y ->
---  print (x,y) >--~          -- (>--~) is a level-3 cover-sequence function, analogous for (>>)
+--  [["a","b"]] ->>= \x ->   -- (->>=) is a level-3 cover-bind function, analogous to (>>==)
+--  [[0],[1,2]] ->>= \y ->
+--  print (x,y) >--~         -- (>--~) is a level-3 cover-sequence function, analogous to (>>)
 --  (.***) (x ++ show y)
 -- :}
 -- ("a",0)
@@ -246,26 +246,26 @@
 -- ("b",2)
 -- [["a0","b0"],["a0","b1","b2"],["a1","a2","b0"],["a1","a2","b1","b2"]]
 --
-(>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m >>>== f = m >>== \x -> join |$>> (sink2 $ f |$> x)
+(>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m >>>= f = m >>== \x -> join |$>> (sink2 $ f |$> x)
 
-(>===>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => (a -> m1 (m2 (m3 b))) -> (b -> m1 (m2 (m3 c))) -> a -> m1 (m2 (m3 c))
-f >===> g = \x -> f x >>>== g
+(>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => (a -> m1 (m2 (m3 b))) -> (b -> m1 (m2 (m3 c))) -> a -> m1 (m2 (m3 c))
+f >>>=> g = \x -> f x >>>= g
 (>>>~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 (m3 a)) -> m1 (m2 (m3 b)) -> m1 (m2 (m3 b))
-m >>>~ k = m >>>== \_ -> k
+m >>>~ k = m >>>= \_ -> k
 
-(>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m >--== k = (-**) m >>>== k
-(->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m ->-== k = (*-*) m >>>== k
-(-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m -->== k = (.**) m >>>== k
-(>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m >>-== k = (--*) m >>>== k
-(->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m ->>== k = (.*) m >>>== k
-(>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
-m >->== k = (-*) m >>>== k
+(>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m >--= k = (-**) m >>>= k
+(->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m ->-= k = (*-*) m >>>= k
+(-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m -->= k = (.**) m >>>= k
+(>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m2 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m >>-= k = (--*) m >>>= k
+(->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m ->>= k = (.*) m >>>= k
+(>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m1 (m3 a) -> (a -> m1 (m2 (m3 b))) -> m1 (m2 (m3 b))
+m >->= k = (-*) m >>>= k
 (-->~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m3 a -> m1 (m2 (m3 b)) -> m1 (m2 (m3 b))
 m -->~ k = (.**) m >>>~ k
 (->-~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => m2 a -> m1 (m2 (m3 b)) -> m1 (m2 (m3 b))
@@ -282,53 +282,53 @@
 -------------------------------------------------------------------------------
 -- Level-4 functions
 
-infixr 1  >====>
-infixr 1  >>>>==, >>>>~
-infixr 1  --->==, -->-==, ->--==, >---==
-infixr 1  -->>==, ->->==, >-->==, >->-==, ->>-==, >>--==
-infixr 1  ->>>==, >->>==, >>->==, >>>-==
+infixr 1  >>>>=>
+infixr 1  >>>>=, >>>>~
+infixr 1  --->=, -->-=, ->--=, >---=
+infixr 1  -->>=, ->->=, >-->=, >->-=, ->>-=, >>--=
+infixr 1  ->>>=, >->>=, >>->=, >>>-=
 infixr 1  --->~, -->-~, ->--~, >---~
 infixr 1  -->>~, ->->~, >-->~, >->-~, ->>-~, >>--~
 infixr 1  ->>>~, >->>~, >>->~, >>>-~
 
-(>>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >>>>== f = m >>>== \x -> join |$>>> (sink3 $ f |$> x)
+(>>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >>>>= f = m >>>= \x -> join |$>>> (sink3 $ f |$> x)
 
-(>====>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => (a -> m1 (m2 (m3 (m4 b)))) -> (b -> m1 (m2 (m3 (m4 c)))) -> a -> m1 (m2 (m3 (m4 c)))
-f >====> g = \x -> f x >>>>== g
+(>>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => (a -> m1 (m2 (m3 (m4 b)))) -> (b -> m1 (m2 (m3 (m4 c)))) -> a -> m1 (m2 (m3 (m4 c)))
+f >>>>=> g = \x -> f x >>>>= g
 (>>>>~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 (m4 a))) -> m1 (m2 (m3 (m4 b))) -> m1 (m2 (m3 (m4 b)))
-m >>>>~ k = m >>>>== \_ -> k
+m >>>>~ k = m >>>>= \_ -> k
 
-(--->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m --->== k = (.***) m >>>>== k 
-(-->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m -->-== k = (**-*) m >>>>== k 
-(->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m ->--== k = (*-**) m >>>>== k 
-(>---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >---== k = (-***) m >>>>== k
+(--->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m --->= k = (.***) m >>>>= k 
+(-->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m -->-= k = (**-*) m >>>>= k 
+(->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m ->--= k = (*-**) m >>>>= k 
+(>---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 a -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >---= k = (-***) m >>>>= k
 
-(-->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m -->>== k = (.**) m >>>>== k 
-(->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m ->->== k = (*-*) m >>>>== k 
-(>-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >-->== k = (-**) m >>>>== k 
-(>->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >->-== k = (-*-*) m >>>>== k 
-(->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m ->>-== k = (*--*) m >>>>== k 
-(>>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >>--== k = (--**) m >>>>== k 
+(-->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m -->>= k = (.**) m >>>>= k 
+(->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m ->->= k = (*-*) m >>>>= k 
+(>-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >-->= k = (-**) m >>>>= k 
+(>->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >->-= k = (-*-*) m >>>>= k 
+(->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m ->>-= k = (*--*) m >>>>= k 
+(>>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >>--= k = (--**) m >>>>= k 
 
-(->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m ->>>== k = (.*) m >>>>== k 
-(>->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >->>== k = (-*) m >>>>== k 
-(>>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >>->== k = (--*) m >>>>== k 
-(>>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
-m >>>-== k = (---*) m >>>>== k 
+(->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m ->>>= k = (.*) m >>>>= k 
+(>->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >->>= k = (-*) m >>>>= k 
+(>>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >>->= k = (--*) m >>>>= k 
+(>>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 b)))) -> m1 (m2 (m3 (m4 b)))
+m >>>-= k = (---*) m >>>>= k 
 
 (--->~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => m4 a -> m1 (m2 (m3 (m4 b))) -> m1 (m2 (m3 (m4 b)))
 m --->~ k = (.***) m >>>>~ k
@@ -364,89 +364,89 @@
 -------------------------------------------------------------------------------
 -- Level-5 functions
 
-infixr 1  >=====>
-infixr 1  >>>>>~, >>>>>==
-infixr 1  ---->==, --->-==, -->--==, ->---==, >----==
-infixr 1  --->>==, -->->==, ->-->==, >--->==, >-->-==, ->->-==, -->>-==, ->>--==, >->--==, >>---==
-infixr 1  -->>>==, ->->>==, >-->>==, >->->==, ->>->==, >>-->==, >>->-==, >->>-==, ->>>-==, >>>--==
-infixr 1  ->>>>==, >->>>==, >>->>==, >>>->==, >>>>-==
+infixr 1  >>>>>=>
+infixr 1  >>>>>~, >>>>>=
+infixr 1  ---->=, --->-=, -->--=, ->---=, >----=
+infixr 1  --->>=, -->->=, ->-->=, >--->=, >-->-=, ->->-=, -->>-=, ->>--=, >->--=, >>---=
+infixr 1  -->>>=, ->->>=, >-->>=, >->->=, ->>->=, >>-->=, >>->-=, >->>-=, ->>>-=, >>>--=
+infixr 1  ->>>>=, >->>>=, >>->>=, >>>->=, >>>>-=
 
 infixr 1  ---->~, --->-~, -->--~, ->---~, >----~
 infixr 1  --->>~, -->->~, ->-->~, >--->~, >-->-~, ->->-~, -->>-~, ->>--~, >->--~, >>---~
 infixr 1  -->>>~, ->->>~, >-->>~, >->->~, ->>->~, >>-->~, >>->-~, >->>-~, ->>>-~, >>>--~
 infixr 1  ->>>>~, >->>>~, >>->>~, >>>->~, >>>>-~
 
-(>>>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>>>>== f = m >>>>== \x -> join |$>>>> (sink4 $ f |$> x)
+(>>>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>>>>= f = m >>>>= \x -> join |$>>>> (sink4 $ f |$> x)
 
-(>=====>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => (a -> m1 (m2 (m3 (m4 (m5 b))))) -> (b -> m1 (m2 (m3 (m4 (m5 c))))) -> a -> m1 (m2 (m3 (m4 (m5 c))))
-f >=====> g = \x -> f x >>>>>== g
+(>>>>>=>) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => (a -> m1 (m2 (m3 (m4 (m5 b))))) -> (b -> m1 (m2 (m3 (m4 (m5 c))))) -> a -> m1 (m2 (m3 (m4 (m5 c))))
+f >>>>>=> g = \x -> f x >>>>>= g
 (>>>>>~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 (m5 a)))) -> m1 (m2 (m3 (m4 (m5 b)))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>>>>~ k = m >>>>>== \_ -> k
+m >>>>>~ k = m >>>>>= \_ -> k
 
-(---->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ---->== k = (.****) m >>>>>== k 
-(--->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m --->-== k = (***-*) m >>>>>== k 
-(-->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m -->--== k = (**-**) m >>>>>== k 
-(->---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->---== k = (*-***) m >>>>>== k 
-(>----==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >----== k = (-****) m >>>>>== k 
+(---->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ---->= k = (.****) m >>>>>= k 
+(--->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m --->-= k = (***-*) m >>>>>= k 
+(-->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m -->--= k = (**-**) m >>>>>= k 
+(->---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->---= k = (*-***) m >>>>>= k 
+(>----=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 a -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >----= k = (-****) m >>>>>= k 
 
-(--->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m --->>== k = (.***) m >>>>>== k 
-(-->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m -->->== k = (**-*) m >>>>>== k 
-(->-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->-->== k = (*-**) m >>>>>== k 
-(>--->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >--->== k = (-***) m >>>>>== k 
-(>-->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >-->-== k = (-**-*) m >>>>>== k 
-(->->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->->-== k = (*-*-*) m >>>>>== k 
-(-->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m -->>-== k = (**--*) m >>>>>== k 
-(->>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->>--== k = (*--**) m >>>>>== k 
-(>->--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >->--== k = (-*-**) m >>>>>== k 
-(>>---==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>---== k = (--***) m >>>>>== k 
+(--->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m4 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m --->>= k = (.***) m >>>>>= k 
+(-->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m -->->= k = (**-*) m >>>>>= k 
+(->-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->-->= k = (*-**) m >>>>>= k 
+(>--->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m5 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >--->= k = (-***) m >>>>>= k 
+(>-->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >-->-= k = (-**-*) m >>>>>= k 
+(->->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->->-= k = (*-*-*) m >>>>>= k 
+(-->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m -->>-= k = (**--*) m >>>>>= k 
+(->>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->>--= k = (*--**) m >>>>>= k 
+(>->--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >->--= k = (-*-**) m >>>>>= k 
+(>>---=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 a) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>---= k = (--***) m >>>>>= k 
 
-(-->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m -->>>== k = (.**) m >>>>>== k 
-(->->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->->>== k = (*-*) m >>>>>== k 
-(>-->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >-->>== k = (-**) m >>>>>== k 
-(>->->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >->->== k = (-*-*) m >>>>>== k 
-(->>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->>->== k = (*--*) m >>>>>== k 
-(>>-->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>-->== k = (--**) m >>>>>== k 
-(>>->-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>->-== k = (--*-*) m >>>>>== k 
-(>->>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >->>-== k = (-*--*) m >>>>>== k 
-(->>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->>>-== k = (*---*) m >>>>>== k 
-(>>>--==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>>--== k = (---**) m >>>>>== k 
+(-->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m3 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m -->>>= k = (.**) m >>>>>= k 
+(->->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->->>= k = (*-*) m >>>>>= k 
+(>-->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m4 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >-->>= k = (-**) m >>>>>= k 
+(>->->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >->->= k = (-*-*) m >>>>>= k 
+(->>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->>->= k = (*--*) m >>>>>= k 
+(>>-->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m5 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>-->= k = (--**) m >>>>>= k 
+(>>->-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>->-= k = (--*-*) m >>>>>= k 
+(>->>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >->>-= k = (-*--*) m >>>>>= k 
+(->>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->>>-= k = (*---*) m >>>>>= k 
+(>>>--=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 a)) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>>--= k = (---**) m >>>>>= k 
 
-(->>>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m ->>>>== k = (.*) m >>>>>== k 
-(>->>>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >->>>== k = (-*) m >>>>>== k 
-(>>->>==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>->>== k = (--*) m >>>>>== k 
-(>>>->==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>>->== k = (---*) m >>>>>== k 
-(>>>>-==) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
-m >>>>-== k = (----*) m >>>>>== k 
+(->>>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m2 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m ->>>>= k = (.*) m >>>>>= k 
+(>->>>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m3 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >->>>= k = (-*) m >>>>>= k 
+(>>->>=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m4 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>->>= k = (--*) m >>>>>= k 
+(>>>->=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m5 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>>->= k = (---*) m >>>>>= k 
+(>>>>-=) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m1 (m2 (m3 (m4 a))) -> (a -> m1 (m2 (m3 (m4 (m5 b))))) -> m1 (m2 (m3 (m4 (m5 b))))
+m >>>>-= k = (----*) m >>>>>= k 
 
 
 (---->~) :: (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => m5 a -> m1 (m2 (m3 (m4 (m5 b)))) -> m1 (m2 (m3 (m4 (m5 b))))
diff --git a/DeepControl/Monad/Morph.hs b/DeepControl/Monad/Morph.hs
--- a/DeepControl/Monad/Morph.hs
+++ b/DeepControl/Monad/Morph.hs
@@ -26,10 +26,14 @@
     (|>|), (|<|), 
     -- ** trans-cover
     (|*|),
+    -- ** trans-fish
+    (|>=>),
 
     -- * Level-2
     -- ** trans-bind
     (|>>=),
+    -- ** trans-fish
+    (|>>=>),
     -- ** trans-map
     (|>>|), (|<<|),
     -- ** trans-cover  
@@ -39,7 +43,9 @@
     -- * Level-3
     -- ** trans-bind
     (|>>>=),
-    -- ** trans-map
+    -- ** trans-fish
+    (|>>>=>),
+     -- ** trans-map
     (|>>>|), (|<<<|),
     -- ** trans-cover  
     (|***|),
@@ -80,7 +86,7 @@
 import DeepControl.Monad.Trans
 
 import Control.Monad.Morph
--- import Control.Monad.Identity (Identity(..))
+import Control.Monad.Identity (Identity(..))
 import Control.Monad.Trans.Identity (IdentityT(..))
 import Control.Monad.Trans.Maybe (MaybeT(..))
 import Control.Monad.List (ListT(..))
@@ -92,6 +98,14 @@
 -- SinkT
 
 class (MonadTrans s) => SinkT s where
+    -- | Alalog to @'DeepControl.Traversable.sink'@.
+    -- 
+    -- >>> sinkT $ MaybeT (ListT (Right [Just 1]))
+    -- ListT (MaybeT (Right (Just [1])))
+    --
+    -- >>> sinkT $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))
+    -- ListT (MaybeT (ExceptT (Identity (Right (Just [1])))))
+    --
     sinkT :: (Monad m, MMonad t,
               MonadTrans_ x t, Traversable x) => 
              s (t m) a -> t (s m) a
@@ -111,6 +125,11 @@
         sinkToTuple = flipTuple . sink . (flipTuple|$>)
         flipTuple (x,y) = (y,x)
 
+-- | Alalog to @'DeepControl.Traversable.sink2'@.
+-- 
+-- >>> sinkT2 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))
+-- ListT (ExceptT (MaybeT (Identity (Just (Right [1])))))
+--
 sinkT2 :: (Monad m, Monad (s (t2 m)), Monad (t2 m), 
            MonadTrans_ x1 t1, Traversable x1, MonadTrans_ x2 t2, Traversable x2, 
            SinkT s, MMonad t1, MMonad t2) =>
@@ -157,6 +176,10 @@
 m |>~ k = m |>= \_ -> k
 -}
 
+infixr 3  |>=>
+(|>=>) :: (Monad m3, MMonad t) => (forall a. m1 a -> t m2 a) -> (forall b. m2 b -> t m3 b) -> m1 c -> t m3 c
+(|>=>) = (>|>)
+
 -------------------------------------------------------------------------------
 -- Level-2 functions
 
@@ -168,6 +191,13 @@
           t1 (t2 m) b -> (forall a. m a -> t1 (t2 n) a) -> t1 (t2 n) b
 m |>>= f = m |>= \x -> squash |>| (sinkT $ f |>| x)
 
+infixr 3  |>>=>
+(|>>=>) :: (Monad m3, Monad m2, Monad (t2 m3), Monad (t2 (t2 m3)), 
+            MonadTrans_ x t1, Traversable x, 
+            MMonad t1, MMonad t2, SinkT t2) => 
+           (forall a. m1 a -> t1 (t2 m2) a) -> (forall b. m2 b -> t1 (t2 m3) b) -> m1 c -> t1 (t2 m3) c
+f |>>=> g = \x -> f x |>>= g
+
 infixl 4  |>>|
 (|>>|) :: (Monad m, Monad (t2 m), MFunctor t1, MFunctor t2) => 
           (forall a . m a -> n a) -> t1 (t2 m) b -> t1 (t2 n) b
@@ -199,6 +229,14 @@
    t1 (t2 (t3 m)) b -> (forall a. m a -> t1 (t2 (t3 n)) a) -> t1 (t2 (t3 n)) b
 m |>>>= f = m |>>= \x -> squash |>>| (sinkT2 $ f |>| x)
 
+infixr 3  |>>>=>
+(|>>>=>) :: (Monad m3, Monad m2, Monad (t2 m3), Monad (t2 (t2 m3)), Monad (t2 (t2 (t3 m3))), Monad (t2 (t3 m3)), Monad (t2 (t3 (t3 m3))), 
+             Monad (t3 m3), Monad (t3 m2), Monad (t3 (t2 (t3 m3))), Monad (t3 (t3 m3)), 
+             MonadTrans_ x1 t1, Traversable x1, MonadTrans_ x2 t2, Traversable x2, 
+             MMonad t1, MMonad t2, MMonad t3, SinkT t2, SinkT t3) => 
+            (forall a. m1 a -> t1 (t2 (t3 m2)) a) -> (forall b. m2 b -> t1 (t2 (t3 m3)) b) -> m1 c -> t1 (t2 (t3 m3)) c
+f |>>>=> g = \x -> f x |>>>= g
+
 infixl 4  |>>>|
 (|>>>|) :: (Monad m, Monad (t3 m), Monad (t2 (t3 m)), MFunctor t1, MFunctor t2, MFunctor t3) => 
            (forall a . m a -> n a) -> t1 (t2 (t3 m)) b -> t1 (t2 (t3 n)) b
@@ -434,10 +472,10 @@
 >tick    :: State Int ()
 >tick = modify (+1)
 >
->tock                        ::                   StateT Int IO ()
+>tock                         ::                   StateT Int IO ()
 >tock = do
->    generalize |>| tick     :: (Monad      m) => StateT Int m  ()  -- (|>|) is the level-1 trans-map function, analogous to (|$>) 
->    lift $ putStrLn "Tock!" :: (MonadTrans t) => t          IO ()
+>    generalize |>| tick      :: (Monad      m) => StateT Int m  ()  -- (|>|) is the level-1 trans-map function, analogous to (|$>) 
+>    (|*|) $ putStrLn "Tock!" :: (MonadTrans t) => t          IO ()
 >
 >-- λ> runStateT tock 0
 >-- Tock!
@@ -447,11 +485,11 @@
 >save    :: StateT Int (Writer  [Int]) ()
 >save = do
 >    n <- get
->    lift $ tell [n]
+>    (|*|) $ tell [n]
 >
 >program ::                   StateT Int (WriterT [Int] IO) ()
 >program = replicateM_ 4 $ do
->    lift |>| tock
+>    (|*|) |>| tock
 >        :: (MonadTrans t) => StateT Int (t             IO) ()
 >    generalize |>>| save                                         -- (|>>|) is the level-2 trans-map function, analogous to (|$>>)
 >        :: (Monad      m) => StateT Int (WriterT [Int] m ) ()
@@ -477,9 +515,9 @@
 >-----------------------------------------------
 >-- Level-1 
 >
->catchIOError :: IO a -> 
+>check :: IO a -> 
 >                ExceptT IOException IO a   -- ExceptT-IO monad
->catchIOError io = ExceptT $ (try io)
+>check io = ExceptT $ (try io)
 >
 >viewFile :: IO ()                          -- IO monad
 >viewFile = do
@@ -487,7 +525,7 @@
 >    putStr str
 >
 >program :: ExceptT IOException IO ()       -- ExceptT-IO monad
->program = (|*|) viewFile |>= catchIOError  -- (|*|) is the level-1 trans-cover function, alias to 'lift', analogous to (.*)
+>program = (|*|) viewFile |>= check         -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*)
 >                                           -- (|>=) is the level-1 trans-bind function, analogous to (>>=)
 >
 >calc_program :: IO (Either IOException ())
@@ -503,20 +541,20 @@
 >             MaybeT IO ()                        -- MaybeT-IO monad
 >viewFile2 filename = do
 >    guard (filename /= "")
->    str <- (|*|) $ readFile "test.txt"        
+>    str <- (|*|) $ readFile filename        
 >    (|*|) $ putStr str
 >
 >program2 :: String -> 
 >            (ExceptT IOException (MaybeT IO)) () -- ExceptT-MaybeT-IO monad
 >program2 filename = 
 >    (|*|) (viewFile2 filename) |>>= \x ->        -- (|>>=) is the level-2 trans-bind function, analogous to (>>=)
->    (|-*|) $ catchIOError x                      -- (|-*|) is a level-2 trans-cover function, analogous to (-*)
+>    (|-*|) $ check x                             -- (|-*|) is a level-2 trans-cover function, analogous to (-*)
 >
 >calc_program2 :: String -> IO (Maybe (Either IOException ())) 
 >calc_program2 filename = runMaybeT . runExceptT $ program2 filename
 >
->-- > calc_program "test.txt"
+>-- > calc_program2 "test.txt"
 >-- Just (Left test.txt: openFile: does not exist (No such file or directory))
->-- > calc_program ""
+>-- > calc_program2 ""
 >-- Nothing
 -}
diff --git a/DeepControl/Monad/Trans/Identity.hs b/DeepControl/Monad/Trans/Identity.hs
--- a/DeepControl/Monad/Trans/Identity.hs
+++ b/DeepControl/Monad/Trans/Identity.hs
@@ -68,6 +68,9 @@
     -- ** lift 
     mapIdentityT5, liftCallCC5, liftCatch5,
 
+    -- * Example: identity-cover
+    -- $Example
+
     ) where 
 
 import DeepControl.Applicative
@@ -192,7 +195,7 @@
     (<*>) = lift2IdentityT3 (|*>>>)
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3) => Monad (IdentityT3 m1 m2 m3) where
     return = IdentityT3 . (.***)
-    m >>= f = IdentityT3 $ runIdentityT3 m >>>== (f >-> runIdentityT3)
+    m >>= f = IdentityT3 $ runIdentityT3 m >>>= (f >-> runIdentityT3)
 
 instance (Alternative m1, Alternative m2, Alternative m3) => Alternative (IdentityT3 m1 m2 m3) where
     empty = IdentityT3 empty
@@ -252,7 +255,7 @@
     (<*>) = lift2IdentityT4 (|*>>>>)
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4) => Monad (IdentityT4 m1 m2 m3 m4) where
     return = IdentityT4 . (.****)
-    m >>= f = IdentityT4 $ runIdentityT4 m >>>>== (f >-> runIdentityT4)
+    m >>= f = IdentityT4 $ runIdentityT4 m >>>>= (f >-> runIdentityT4)
 
 instance (Alternative m1, Alternative m2, Alternative m3, Alternative m4) => Alternative (IdentityT4 m1 m2 m3 m4) where
     empty = IdentityT4 empty
@@ -330,7 +333,7 @@
     (<*>) = lift2IdentityT5 (|*>>>>>)
 instance (Monad m1, Monad m2, Traversable m2, Monad m3, Traversable m3, Monad m4, Traversable m4, Monad m5, Traversable m5) => Monad (IdentityT5 m1 m2 m3 m4 m5) where
     return = IdentityT5 . (.*****)
-    m >>= f = IdentityT5 $ runIdentityT5 m >>>>>== (f >-> runIdentityT5)
+    m >>= f = IdentityT5 $ runIdentityT5 m >>>>>= (f >-> runIdentityT5)
 
 instance (Alternative m1, Alternative m2, Alternative m3, Alternative m4, Alternative m5) => Alternative (IdentityT5 m1 m2 m3 m4 m5) where
     empty = IdentityT5 empty
@@ -431,7 +434,7 @@
 (****-:) :: (Monad m1, Monad m2, Monad m3, Monad m4, Monad m5) => IdentityT m5 a -> IdentityT5 m1 m2 m3 m4 m5 a
 (****-:) = (---*-:) . (***-:)
 
-{- $Example_Level2
+{- $Example
 Here is an example showing how to use identity-cover functions
 
 >import DeepControl.Applicative ((|$>))
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 ## Examples
 
-### [Applicative](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Applicative.html)
+### [Applicative](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Applicative.html)
 
 This module enables you to program in applicative style for more deeper level than the usual Applicative module expresses.
 You would soon realize exactly what more deeper level means by reading the example codes below in order.
@@ -182,28 +182,7 @@
 
 Work well likewise.
 
-### [Traversable](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Traversable.html)
-
-    Prelude> :m DeepControl.Traversable
-
-List, Maybe, Either, Except and Writer monads are all sinkable infinitely.
-
-    > :t sink
-    sink :: (Applicative f, Traversable c) => c (f a) -> f (c a)
-
-    > sink $ Just [1]
-    [Just 1]
-    > sink2 $ Just (Right [1])
-    Right [Just 1]
-
-    > sink $ Right [Just 1]
-    [Right (Just 1)]
-    > sink2 $ Right [Just 1]
-    [Just (Right 1)]
-
-So these monads can be deepened.
-
-### [Monad](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Monad.html)
+### [Monad](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Monad.html)
 
 This module enables you to program in Monad for more deeper level than the usual Monad module expresses.
 You would soon realize exactly what more deeper level means by reading the example codes below in order.
@@ -223,6 +202,26 @@
 -- 7
 ```
 
+#### [Traversable](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Traversable.html)
+
+Identity, List, Maybe, Either, Except and Writer monads are sinkable monads.
+
+    Prelude> :m DeepControl.Traversable
+    > :t sink
+    sink :: (Applicative f, Traversable c) => c (f a) -> f (c a)  -- alias to 'sequenceA'
+
+    > sink $ Just [1]
+    [Just 1]
+    > sink2 $ Just (Right [1])
+    Right [Just 1]
+
+    > sink $ Right [Just 1]
+    [Right (Just 1)]
+    > sink2 $ Right [Just 1]
+    [Just (Right 1)]
+
+So within these monads, deep level(layered) bind functions can be made.
+
 #### Level-2
 
 ```haskell
@@ -261,14 +260,14 @@
 
 ```haskell
 import DeepControl.Applicative ((|$>>), (.*), (.**), (.***))
-import DeepControl.Monad ((>>), (>>>==), (>--~), (-->~))
+import DeepControl.Monad ((>>), (>>>=), (>--~), (-->~))
 import Control.Monad.Writer
 
 factorial :: Int ->
              IO (Maybe (Writer [Int] Int))            -- IO-Maybe-Writer monad
-factorial n | n < 0  = (.*) Nothing                  
+factorial n | n < 0  = (.*) Nothing
             | n == 0 = (.**) $ tell [0] >> (.*) 1
-            | n > 0  = factorial (n-1) >>>== \v ->    -- (>>>==) is the level-3 bind function, analogous to (>>=)
+            | n > 0  = factorial (n-1) >>>= \v ->    -- (>>>=) is the level-3 bind function, analogous to (>>=)
                        print v >--~                   -- (>--~) is a level-3 cover-sequence function, analogous to (>>)
                        tell [v] -->~                  -- (-->~) is a level-3 cover-sequence function too, analogous to (>>)
                        (.***) (n * v)
@@ -287,7 +286,7 @@
 
 Work well likewise.
 
-### [Monad-Transformer](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Monad-Trans.html)
+### [Monad-Transformer](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Monad-Trans.html)
 
 #### Level-2
 
@@ -321,6 +320,7 @@
 ackermann x y = do
     timelimit <- ask
     (|*|) . IdentityT2 $ ackermannTimeLimit timelimit x y  -- lift IO-Maybe function to ReaderT-IdentityT2-IO-Maybe function
+                                                           -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*)
 
 calc_ackermann :: TimeLimit -> Int -> Int -> IO (Maybe Int)
 calc_ackermann timelimit x y = ackermann x y >- \r -> runReaderT r timelimit
@@ -332,6 +332,7 @@
 ackermann' :: Int -> Int -> 
               ReaderT TimeLimit (MaybeT IO) Int                 -- ReaderT-MaybeT-IO monad
 ackermann' x y = (transroll2 . runIdentityT2) |>| ackermann x y -- You can get usual ReaderT-MaybeT-IO function from ReaderT-IdentityT2-IO-Maybe function
+                                                                -- (|>|) is the level-1 trans-map function, analogous to (|$>)
 
 ackermann'' :: Int -> Int -> 
                ReaderT TimeLimit (IdentityT2 IO Maybe) Int       -- ReaderT-IdentityT2-IO-Maybe monad
@@ -367,8 +368,34 @@
     untransroll3 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))
       :: Num a => ExceptT e Identity [Maybe a]
 
-### [Monad-Morph](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Monad-Morph.html)
+### [Monad-Morph](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Monad-Morph.html)
 
+#### SinkT
+
+IdentityT, ListT, MaybeT, ExceptT and WriterT monadtrans' are sinkable.
+
+    Prelude> :m DeepControl.Monad.Morph
+    > :t sinkT
+    sinkT
+      :: (Monad m, Traversable x,
+          DeepControl.Monad.Trans.MonadTrans_ x t, MMonad t, SinkT s) =>
+         s (t m) a -> t (s m) a
+
+    > :m + Control.Monad.Trans.List Control.Monad.Trans.Maybe
+    > :m + DeepControl.Monad.Trans.Identity DeepControl.Monad.Trans.Except DeepControl.Monad.Trans.Writer
+
+    > sinkT $ MaybeT (ListT (Right [Just 1]))
+    ListT (MaybeT (Right (Just [1])))
+    > sinkT $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))
+    ListT (MaybeT (ExceptT (Identity (Right (Just [1])))))
+
+    > sinkT2 $ MaybeT (ListT (ExceptT (Identity (Right [Just 1]))))
+    ListT (ExceptT (MaybeT (Identity (Just (Right [1])))))
+
+So within these monadtrans', deep level(layered) trans-bind functions can be made.
+
+#### Level-2
+
 Here is a monad morph example how to use trans-map functions.
 
 ```haskell
@@ -380,10 +407,10 @@
 tick    :: State Int ()
 tick = modify (+1)
 
-tock                        ::                   StateT Int IO ()
+tock                         ::                   StateT Int IO ()
 tock = do
-    generalize |>| tick     :: (Monad      m) => StateT Int m  ()  -- (|>|) is the level-1 trans-map function, analogous to (|$>)
-    lift $ putStrLn "Tock!" :: (MonadTrans t) => t          IO ()
+    generalize |>| tick      :: (Monad      m) => StateT Int m  ()  -- (|>|) is the level-1 trans-map function, analogous to (|$>)
+    (|*|) $ putStrLn "Tock!" :: (MonadTrans t) => t          IO ()
 
 -- λ> runStateT tock 0
 -- Tock!
@@ -393,11 +420,11 @@
 save    :: StateT Int (Writer  [Int]) ()
 save = do
     n <- get
-    lift $ tell [n]
+    (|*|) $ tell [n]
 
 program ::                   StateT Int (WriterT [Int] IO) ()
 program = replicateM_ 4 $ do
-    lift |>| tock
+    (|*|) |>| tock
         :: (MonadTrans t) => StateT Int (t             IO) ()
     generalize |>>| save                                        -- (|>>|) is the level-2 trans-map function, analogous to (|$>>)
         :: (Monad      m) => StateT Int (WriterT [Int] m ) ()
@@ -422,9 +449,9 @@
 -----------------------------------------------
 -- Level-1 
 
-catchIOError :: IO a -> 
-                ExceptT IOException IO a   -- ExceptT-IO monad
-catchIOError io = ExceptT $ (try io)
+check :: IO a -> 
+         ExceptT IOException IO a          -- ExceptT-IO monad
+check io = ExceptT $ (try io)
 
 viewFile :: IO ()                          -- IO monad
 viewFile = do
@@ -432,7 +459,7 @@
     putStr str
 
 program :: ExceptT IOException IO ()       -- ExceptT-IO monad
-program = (|*|) viewFile |>= catchIOError  -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*)
+program = (|*|) viewFile |>= check         -- (|*|) is the level-1 trans-cover function, alias to 'lift' and analogous to (.*)
                                            -- (|>=) is the level-1 trans-bind function, analogous to (>>=)
 
 calc_program :: IO (Either IOException ())
@@ -448,21 +475,21 @@
              MaybeT IO ()                        -- MaybeT-IO monad
 viewFile2 filename = do
     guard (filename /= "")
-    str <- (|*|) $ readFile "test.txt"
+    str <- (|*|) $ readFile filename
     (|*|) $ putStr str
 
 program2 :: String -> 
             (ExceptT IOException (MaybeT IO)) () -- ExceptT-MaybeT-IO monad
 program2 filename = 
     (|*|) (viewFile2 filename) |>>= \x ->        -- (|>>=) is the level-2 trans-bind function, analogous to (>>=)
-    (|-*|) $ catchIOError x                      -- (|-*|) is a level-2 trans-cover function, analogous to (-*)
+    (|-*|) $ check x                             -- (|-*|) is a level-2 trans-cover function, analogous to (-*)
 
 calc_program2 :: String -> IO (Maybe (Either IOException ())) 
 calc_program2 filename = runMaybeT . runExceptT $ program2 filename
 
--- > calc_program "test.txt"
+-- > calc_program2 "test.txt"
 -- Just (Left test.txt: openFile: does not exist (No such file or directory))
--- > calc_program ""
+-- > calc_program2 ""
 -- Nothing
 ```
 
@@ -470,4 +497,4 @@
 
 Work well likewise.
 
-### [Arrow](https://hackage.haskell.org/package/deepcontrol-0.5.1.0/docs/DeepControl-Arrow.html)
+### [Arrow](https://hackage.haskell.org/package/deepcontrol-0.5.2.0/docs/DeepControl-Arrow.html)
diff --git a/deepcontrol.cabal b/deepcontrol.cabal
--- a/deepcontrol.cabal
+++ b/deepcontrol.cabal
@@ -1,7 +1,7 @@
 name:                deepcontrol
-version:             0.5.1.0
+version:             0.5.2.0
 synopsis:            Provide more deeper level style of programming than the usual Control.xxx modules express
-description:         This module enables more deeper level style of programming than the usual Control.xxx modules express, especially for Applicative and Monad.
+description:         This module provides more deeper level style of programming than the usual Control.xxx modules express, especially for Applicative and Monad.
 license:             BSD3
 license-file:        LICENSE
 author:              KONISHI Yohsuke
@@ -10,7 +10,7 @@
 copyright:           (c) 2015 KONISHI Yohsuke
 category:            Control
 build-type:          Simple
--- extra-source-files:  
+-- extra-source-files:
 cabal-version:       >=1.10
 extra-source-files:  README.md
 
@@ -31,7 +31,7 @@
                      , DeepControl.Monad.Signatures
                      , DeepControl.Monad.Trans
                      , DeepControl.Monad.Trans.Identity
-  -- other-modules:       
+  -- other-modules:
   other-extensions:    MultiParamTypeClasses
                      , FlexibleInstances
                      , UndecidableInstances
@@ -45,7 +45,7 @@
                      , mtl >=2.2
                      , mmorph >= 1.0
                      , transformers >=0.4
-  --hs-source-dirs:      
+  --hs-source-dirs:
   default-language:    Haskell2010
   --Ghc-Options:         -Wall -O2
 
@@ -168,4 +168,3 @@
                       , HUnit >= 1.3.0
                       , mtl, transformers
                       , deepcontrol
-
diff --git a/test/unit_Monad-factorial.hs b/test/unit_Monad-factorial.hs
--- a/test/unit_Monad-factorial.hs
+++ b/test/unit_Monad-factorial.hs
@@ -9,7 +9,7 @@
 factorial n | n < 0  = Nothing
             | n == 0 = (.*) $ tell [0] >> (.*) 1
             | n > 0  = factorial (n-1) >>== \v ->   
-                       tell [v] ->~                 -- (->~) is a level-2 bind-cover function, analogous for (>>)
+                       tell [v] ->~                 -- (->~) is a level-2 bind-cover function, analogous to (>>)
                        (.**) (n * v)
 
 -- > runWriter |$> factorial 5
diff --git a/test/unit_Monad-factorial2.hs b/test/unit_Monad-factorial2.hs
--- a/test/unit_Monad-factorial2.hs
+++ b/test/unit_Monad-factorial2.hs
@@ -1,16 +1,16 @@
 import Test.HUnit hiding (State)
 
 import DeepControl.Applicative ((|$>>), (.*), (.**), (.***))
-import DeepControl.Monad ((>>), (>>>==), (>--~), (-->~))
+import DeepControl.Monad ((>>), (>>>=), (>--~), (-->~))
 import Control.Monad.Writer
 
 factorial :: Int ->
              IO (Maybe (Writer [Int] Int))            -- IO-Maybe-Writer monad
 factorial n | n < 0  = (.*) Nothing                  
             | n == 0 = (.**) $ tell [0] >> (.*) 1
-            | n > 0  = factorial (n-1) >>>== \v ->    -- (>>>==) is the level-3 bind function, analogous for (>>=)
-                       print v >--~                   -- (>--~) is a level-3 bind-cover function, analogous for (>>)
-                       tell [v] -->~                  -- (-->~) is a level-3 bind-cover function too, analogous for (>>)
+            | n > 0  = factorial (n-1) >>>= \v ->    -- (>>>=) is the level-3 bind function, analogous to (>>=)
+                       print v >--~                   -- (>--~) is a level-3 bind-cover function, analogous to (>>)
+                       tell [v] -->~                  -- (-->~) is a level-3 bind-cover function too, analogous to (>>)
                        (.***) (n * v)
 
 -- > runWriter |$>> factorial 5
diff --git a/test/unit_Monad.hs b/test/unit_Monad.hs
--- a/test/unit_Monad.hs
+++ b/test/unit_Monad.hs
@@ -46,13 +46,13 @@
     ]
 
 tLevel3 = ("Level3" ~:) |$> [
-      ([[[1]]] >>>== \x -> (.***) x) ~?= [[[1]]]
-    , ((Just [[1]]) >>>== \x -> (.***) x) ~?= Just [[1]]
-    , (([Just [1]]) >>>== \x -> (.***) x) ~?= [Just [1]]
-    , (Right (Just [1]) >>>== \x -> (.***) x) ~?= (Right (Just [1]) :: Either () (Maybe [Int]))
+      ([[[1]]] >>>= \x -> (.***) x) ~?= [[[1]]]
+    , ((Just [[1]]) >>>= \x -> (.***) x) ~?= Just [[1]]
+    , (([Just [1]]) >>>= \x -> (.***) x) ~?= [Just [1]]
+    , (Right (Just [1]) >>>= \x -> (.***) x) ~?= (Right (Just [1]) :: Either () (Maybe [Int]))
 
-    , (Right (Just [0]) >>>== \x -> (.***) (x+1) >>>== \x -> (.***) (x+2)) ~?= (Right (Just [3]) :: Either () (Maybe [Int]))
-    , (Right Nothing    >>>== \x -> (.***) (x+1) >>>== \x -> (.***) (x+2)) ~?= (Right Nothing :: Either () (Maybe [Int]))
+    , (Right (Just [0]) >>>= \x -> (.***) (x+1) >>>= \x -> (.***) (x+2)) ~?= (Right (Just [3]) :: Either () (Maybe [Int]))
+    , (Right Nothing    >>>= \x -> (.***) (x+1) >>>= \x -> (.***) (x+2)) ~?= (Right Nothing :: Either () (Maybe [Int]))
     ]
 
 tests_Level0 :: Test
@@ -68,14 +68,14 @@
 
 tests_Level2 :: Test
 tests_Level2 = test [ 
-      "List-List" ~: "(>>==)" ~: do
+      "List-List" ~: "(>>=)" ~: do
         let actual :: [[String]]
             actual = [["a","b"]] >>== \x ->
                      [[0],[1,2]] >>== \y ->
                      (.**) $ x ++ show y
         actual @?= [["a0","b0"],["a0","b1","b2"],["a1","a2","b0"],["a1","a2","b1","b2"]]
 
-    , "List-Maybe" ~: "(>>==), (>>~)" ~: do
+    , "List-Maybe" ~: "(>>=), (>>~)" ~: do
         let actual :: [Maybe Double]
             actual = (readMay |$> ["1", "2", "_"]) >>== \a ->
                      (readMay |$> ["0", "2"]) >>== \b ->
@@ -90,13 +90,13 @@
                      (.**) $ a / b
         actual @?= [Just 0.5,Just 1.0,Nothing]
 
-    , "(->)-Maybe" ~: "(>-==)" ~: do
+    , "(->)-Maybe" ~: "(>-=)" ~: do
         let lengthM :: [Int] -> Maybe Int
             lengthM [] = Nothing
             lengthM xs = Just (length xs) 
             averageM :: [Int] -> Maybe Double
             averageM = 
-                sum >-== \s ->
+                sum >-= \s ->
                 lengthM >>== \l ->
                 (.**) $ fromIntegral s / fromIntegral l
         averageM [10, 25, 70] @?= Just 35.0
@@ -110,7 +110,7 @@
                                         xs -> Just (length xs) 
             averageRM :: Reader [Int] (Maybe Double)
             averageRM = 
-                sumR >-== \s ->
+                sumR >-= \s ->
                 lengthRM >>== \l ->
                 (.**) $ fromIntegral s / fromIntegral l
         runReader averageRM [10, 25, 70] @?= Just 35.0
@@ -129,11 +129,11 @@
 
 tests_Level3 :: Test
 tests_Level3 = test [ 
-      "IO-Maybe-Writer" ~: "(>>>==), (-->~), (*-*)" ~: do
+      "IO-Maybe-Writer" ~: "(>>>=), (-->~), (*-*)" ~: do
         let factorial :: Int -> IO (Maybe (Writer [Int] Int))
             factorial n | n < 0  = (*-*) Nothing
                         | n == 0 = (.**) $ tell [0] >> return 1
-                        | n > 0  = factorial (n-1) >>>== \v ->
+                        | n > 0  = factorial (n-1) >>>= \v ->
                                    print v >--~
                                    tell [v] -->~
                                    (.***) (n * v)
diff --git a/test/unit_MonadMorph-bind.hs b/test/unit_MonadMorph-bind.hs
--- a/test/unit_MonadMorph-bind.hs
+++ b/test/unit_MonadMorph-bind.hs
@@ -3,15 +3,15 @@
 import DeepControl.Monad.Morph ((|>=), (|>>=), (|*|), (|-*|))
 import DeepControl.Monad.Trans.Except
 
-import Control.Exception (IOException, try)
 import Control.Monad.Trans.Maybe
+import Control.Exception (IOException, try)
 
 -----------------------------------------------
 -- Level-1 
 
-catchIOError :: IO a -> 
+check :: IO a -> 
                 ExceptT IOException IO a   -- ExceptT-IO monad
-catchIOError io = ExceptT $ (try io)
+check io = ExceptT $ (try io)
 
 viewFile :: IO ()                          -- IO monad
 viewFile = do
@@ -19,7 +19,7 @@
     putStr str
 
 program :: ExceptT IOException IO ()       -- ExceptT-IO monad
-program = (|*|) viewFile |>= catchIOError  -- (|*|) is the level-1 trans-cover function, alias to 'lift', analogous to (.*)
+program = (|*|) viewFile |>= check  -- (|*|) is the level-1 trans-cover function, alias to 'lift', analogous to (.*)
                                            -- (|>=) is the level-1 trans-bind function, analogous to (>>=)
 
 calc_program :: IO (Either IOException ())
@@ -35,21 +35,21 @@
              MaybeT IO ()                        -- MaybeT-IO monad
 viewFile2 filename = do
     guard (filename /= "")
-    str <- (|*|) $ readFile "test.txt"        
+    str <- (|*|) $ readFile filename       
     (|*|) $ putStr str
 
 program2 :: String -> 
             (ExceptT IOException (MaybeT IO)) () -- ExceptT-MaybeT-IO monad
 program2 filename = 
     (|*|) (viewFile2 filename) |>>= \x ->        -- (|>>=) is the level-2 trans-bind function, analogous to (>>=)
-    (|-*|) $ catchIOError x                      -- (|-*|) is a level-2 trans-cover function, analogous to (-*)
+    (|-*|) $ check x                      -- (|-*|) is a level-2 trans-cover function, analogous to (-*)
 
 calc_program2 :: String -> IO (Maybe (Either IOException ())) 
 calc_program2 filename = runMaybeT . runExceptT $ program2 filename
 
--- > calc_program "test.txt"
+-- > calc_program2 "test.txt"
 -- Just (Left test.txt: openFile: does not exist (No such file or directory))
--- > calc_program ""
+-- > calc_program2 ""
 -- Nothing
 
 ------------------------------------------------------
diff --git a/test/unit_MonadMorph.hs b/test/unit_MonadMorph.hs
--- a/test/unit_MonadMorph.hs
+++ b/test/unit_MonadMorph.hs
@@ -8,10 +8,10 @@
 tick    :: State Int ()
 tick = modify (+1)
 
-tock                        ::                   StateT Int IO ()
+tock                         ::                   StateT Int IO ()
 tock = do
-    generalize |>| tick     :: (Monad      m) => StateT Int m  ()  -- (|>|) is the level-1 trans-map function, analogous for (|$>)
-    lift $ putStrLn "Tock!" :: (MonadTrans t) => t          IO ()
+    generalize |>| tick      :: (Monad      m) => StateT Int m  ()  -- (|>|) is the level-1 trans-map function, analogous to (|$>)
+    (|*|) $ putStrLn "Tock!" :: (MonadTrans t) => t          IO ()
 
 -- λ> runStateT tock 0
 -- Tock!
@@ -21,13 +21,13 @@
 save    :: StateT Int (Writer  [Int]) ()
 save = do
     n <- get
-    lift $ tell [n]
+    (|*|) $ tell [n]
 
 program ::                   StateT Int (WriterT [Int] IO) ()
 program = replicateM_ 4 $ do
-    lift |>| tock
+    (|*|) |>| tock
         :: (MonadTrans t) => StateT Int (t             IO) ()
-    generalize |>>| save                                        -- (|>>|) is the level-2 trans-map function, analogous for (|$>>)
+    generalize |>>| save                                        -- (|>>|) is the level-2 trans-map function, analogous to (|$>>)
         :: (Monad      m) => StateT Int (WriterT [Int] m ) ()
 
 -- λ> execWriterT (runStateT program 0)
