diff --git a/associative.cabal b/associative.cabal
--- a/associative.cabal
+++ b/associative.cabal
@@ -1,6 +1,6 @@
 cabal-version:        2.4
 name:                 associative
-version:              0.0.2
+version:              0.0.3
 synopsis:             Partial Semigroup and Semigroup operations
 description:          Partial Semigroup and Semigroup operations: Associative, Closed, Binary operation which may not be defined for all domains
 license:              BSD-3-Clause
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+0.0.3
+
+* New `nonPartialSemigroup` isomorphism witnessing that `PartialSemigroupOpT (Const b) a b` is isomorphic to `SemigroupOp a b`
+* New `nonPartialMonoid` isomorphism converting between `(PartialSemigroupOpT (Const a) a a, a)` and `MonoidOp a`
+* Fixed name-shadowing warning in `psemigroupLawAssociative`
+* Qualified all imports, ormolu formatting
+
 0.0.2
 
 * Wrapper values (`semigroupMaybe`, `semigroupDual`, `semigroupDown`, `semigroupIdentity`, `semigroupTuple`, `semigroupWrappedMonoid`, `semigroupFunction`, and their `psemigroup`/`monoid`/`pmonoid` counterparts) now take an explicit `SemigroupOp'` or `MonoidOp` parameter instead of using `Semigroup`/`Monoid` class constraints
diff --git a/src/Data/Associative.hs b/src/Data/Associative.hs
--- a/src/Data/Associative.hs
+++ b/src/Data/Associative.hs
@@ -221,9 +221,10 @@
 -- * @monoidLawAssociative@ / @pmonoidLawAssociative@ -- associativity of the binary operation
 --
 -- * @monoidLawLeftIdentity@ / @pmonoidLawLeftIdentity@, @monoidLawRightIdentity@ / @pmonoidLawRightIdentity@ -- identity element laws
-module Data.Associative (
-  module A
-) where
+module Data.Associative
+  ( module A,
+  )
+where
 
 import Data.Associative.MonoidOp as A
 import Data.Associative.PartialMonoidOp as A
diff --git a/src/Data/Associative/MonoidOp.hs b/src/Data/Associative/MonoidOp.hs
--- a/src/Data/Associative/MonoidOp.hs
+++ b/src/Data/Associative/MonoidOp.hs
@@ -78,7 +78,7 @@
     iso,
     lens,
   )
-import Data.Associative.SemigroupOp (HasSemigroupOpT (..), SemigroupOp', op, runSemigroupOp, semigroupDual, semigroupDown, semigroupFunction, semigroupIdentity, semigroupLiftA2, semigroupMaybe, semigroupTuple, semigroupWrappedMonoid)
+import Data.Associative.SemigroupOp (HasSemigroupOpT (..), SemigroupOp', op, runSemigroupOp, semigroupDown, semigroupDual, semigroupFunction, semigroupIdentity, semigroupLiftA2, semigroupMaybe, semigroupTuple, semigroupWrappedMonoid)
 import qualified Data.Associative.SemigroupOp as SG (semigroupSemigroup)
 import Data.Bits (Bits, FiniteBits, complement, xor, zeroBits, (.&.), (.|.))
 import Data.Functor.Alt (Alt (..))
diff --git a/src/Data/Associative/PartialMonoidOp.hs b/src/Data/Associative/PartialMonoidOp.hs
--- a/src/Data/Associative/PartialMonoidOp.hs
+++ b/src/Data/Associative/PartialMonoidOp.hs
@@ -13,6 +13,7 @@
 
     -- * Isomorphism
     iPartialMonoidOp,
+    nonPartialMonoid,
 
     -- * Running
     runPartialMonoidOp,
@@ -78,27 +79,31 @@
     iso,
     lens,
     review,
+    view,
   )
 import Data.Associative.MonoidOp (MonoidOp (..))
 import Data.Associative.PartialSemigroupOp
   ( HasPartialSemigroupOpT (..),
     PartialSemigroupOp',
+    PartialSemigroupOpT,
     iPartialSemigroupOp,
+    nonPartialSemigroup,
     psemigroupDown,
     psemigroupDual,
     psemigroupFunction,
     psemigroupIdentity,
     psemigroupLiftA2,
     psemigroupMaybe,
+    psemigroupSemigroup,
     psemigroupTuple,
     psemigroupWrappedMonoid,
     runPartialSemigroupOp,
-    psemigroupSemigroup,
     total,
   )
 import Data.Associative.SemigroupOp (SemigroupOp')
 import Data.Bits (Bits, FiniteBits, complement, xor, zeroBits, (.&.), (.|.))
 import Data.Functor.Alt (Alt (..))
+import Data.Functor.Const (Const)
 import Data.Functor.Identity (Identity (..))
 import Data.HashMap.Strict (HashMap)
 import qualified Data.HashMap.Strict as HashMap
@@ -161,6 +166,13 @@
     (\(PartialMonoidOp s e) -> (runPartialSemigroupOp s, e))
     (\(f, e) -> PartialMonoidOp (review iPartialSemigroupOp f) e)
 {-# INLINE iPartialMonoidOp #-}
+
+nonPartialMonoid :: Iso (PartialSemigroupOpT (Const a) a a, a) (PartialSemigroupOpT (Const a') a' a', a') (MonoidOp a) (MonoidOp a')
+nonPartialMonoid =
+  iso
+    (\(s, e) -> MonoidOp (view nonPartialSemigroup s) e)
+    (\(MonoidOp s e) -> (review nonPartialSemigroup s, e))
+{-# INLINE nonPartialMonoid #-}
 
 -- | Extract the partial binary operation and run it.
 --
diff --git a/src/Data/Associative/PartialSemigroupOp.hs b/src/Data/Associative/PartialSemigroupOp.hs
--- a/src/Data/Associative/PartialSemigroupOp.hs
+++ b/src/Data/Associative/PartialSemigroupOp.hs
@@ -21,6 +21,7 @@
     -- * Isomorphisms
     iPartialSemigroupOpT,
     iPartialSemigroupOp,
+    nonPartialSemigroup,
 
     -- * Running
     runPartialSemigroupOpT,
@@ -125,10 +126,12 @@
 import Control.Monad.State.Class (MonadState (..))
 import Control.Monad.Writer.Class (MonadWriter (..))
 import Control.Selective (Selective (..), selectM)
+import Data.Associative.SemigroupOp (SemigroupOp, SemigroupOp', op, runSemigroupOp)
 import Data.Bits (Bits, FiniteBits, complement, xor, (.&.), (.|.))
 import Data.Functor.Alt (Alt (..))
 import Data.Functor.Apply (Apply (..), liftF2)
 import Data.Functor.Bind (Bind (..))
+import Data.Functor.Const (Const (..))
 import Data.Functor.Extend (Extend (..))
 import Data.Functor.Identity (Identity (..))
 import Data.Functor.Plus (Plus (..))
@@ -148,7 +151,6 @@
 import Data.Profunctor (Choice (..), Profunctor (..), Strong (..))
 import Data.Proxy (Proxy)
 import Data.Semigroup (Dual (..), WrappedMonoid (..))
-import Data.Associative.SemigroupOp (SemigroupOp', runSemigroupOp)
 import Data.Semigroupoid (Semigroupoid (..))
 import Data.Set (Set)
 import qualified Data.Set as Set
@@ -223,6 +225,13 @@
     (\k -> PartialSemigroupOpT (\a1 a2 -> Identity (k a1 a2)))
 {-# INLINE iPartialSemigroupOp #-}
 
+nonPartialSemigroup :: Iso (PartialSemigroupOpT (Const b) a b) (PartialSemigroupOpT (Const b') a' b') (SemigroupOp a b) (SemigroupOp a' b')
+nonPartialSemigroup =
+  iso
+    (\k -> op (\a1 a2 -> getConst (runPartialSemigroupOpT k a1 a2)))
+    (\k -> totalT (\a1 a2 -> Const (runSemigroupOp k a1 a2)))
+{-# INLINE nonPartialSemigroup #-}
+
 -- | Unwrap a 'PartialSemigroupOpT' to its underlying function.
 --
 -- >>> runPartialSemigroupOpT addPos 3 4
@@ -545,15 +554,15 @@
 -- >>> runIdentity $ psemigroupLawAssociative addPos (-1) 2 3
 -- True
 psemigroupLawAssociative :: (Monad f, Eq a) => PartialSemigroupOpT' f a -> a -> a -> a -> f Bool
-psemigroupLawAssociative (PartialSemigroupOpT op) x y z = do
-  mxy <- op x y
+psemigroupLawAssociative (PartialSemigroupOpT f) x y z = do
+  mxy <- f x y
   lhs <- case mxy of
     Nothing -> pure Nothing
-    Just xy -> op xy z
-  myz <- op y z
+    Just xy -> f xy z
+  myz <- f y z
   rhs <- case myz of
     Nothing -> pure Nothing
-    Just yz -> op x yz
+    Just yz -> f x yz
   pure (lhs == rhs)
 
 -- | 'Semigroup' associativity: @(p '<>' q) '<>' r == p '<>' (q '<>' r)@
@@ -731,10 +740,13 @@
 -- >>> run (psemigroupMaybe cat) (Just [1 :: Int]) Nothing
 -- Just (Just [1])
 psemigroupMaybe :: SemigroupOp' a -> PartialSemigroupOp' (Maybe a)
-psemigroupMaybe s = total (\mx my -> case (mx, my) of
-  (Nothing, y) -> y
-  (x, Nothing) -> x
-  (Just x, Just y) -> Just (runSemigroupOp s x y))
+psemigroupMaybe s =
+  total
+    ( \mx my -> case (mx, my) of
+        (Nothing, y) -> y
+        (x, Nothing) -> x
+        (Just x, Just y) -> Just (runSemigroupOp s x y)
+    )
 
 -- | Reverses the inner semigroup.
 --
diff --git a/src/Data/Associative/SemigroupOp.hs b/src/Data/Associative/SemigroupOp.hs
--- a/src/Data/Associative/SemigroupOp.hs
+++ b/src/Data/Associative/SemigroupOp.hs
@@ -621,10 +621,13 @@
 -- >>> run (semigroupMaybe cat) (Just [1 :: Int]) Nothing
 -- Just [1]
 semigroupMaybe :: SemigroupOp' a -> SemigroupOp' (Maybe a)
-semigroupMaybe s = op (\mx my -> case (mx, my) of
-  (Nothing, y) -> y
-  (x, Nothing) -> x
-  (Just x, Just y) -> Just (runSemigroupOp s x y))
+semigroupMaybe s =
+  op
+    ( \mx my -> case (mx, my) of
+        (Nothing, y) -> y
+        (x, Nothing) -> x
+        (Just x, Just y) -> Just (runSemigroupOp s x y)
+    )
 
 -- | First-success on 'Maybe' via 'Alt'.
 --
