diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# v0.2
+
+## Breaking
+
+- Added more tests in `isManyProperties` and an `Arbitrary` constraint on its parameter `a`
diff --git a/lawful-conversions.cabal b/lawful-conversions.cabal
--- a/lawful-conversions.cabal
+++ b/lawful-conversions.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: lawful-conversions
-version: 0.1.7
+version: 0.2
 synopsis: Lawful typeclasses for bidirectional conversion between types
 category: Conversion
 homepage: https://github.com/nikita-volkov/lawful-conversions
@@ -50,6 +50,8 @@
   evident what any of its instances do and it provides property-tests for you
   to validate your instances.
 
+  The laws and the concepts are based on set and category theories.
+
   = Prior work and acknowledgements
 
   This library is an offspring of the "[isomorphism-class](https://hackage.haskell.org/package/isomorphism-class)" library, expanding upon the patterns discovered there. Both libraries are maintained letting their designs compete.
@@ -83,7 +85,7 @@
   hs-source-dirs: src/library
   exposed-modules: LawfulConversions
   other-modules:
-    LawfulConversions.Classes
+    LawfulConversions.Algebra
     LawfulConversions.Optics
     LawfulConversions.Prelude
     LawfulConversions.Properties
diff --git a/src/library/LawfulConversions.hs b/src/library/LawfulConversions.hs
--- a/src/library/LawfulConversions.hs
+++ b/src/library/LawfulConversions.hs
@@ -105,7 +105,7 @@
   )
 where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Optics
 import LawfulConversions.Properties
 import LawfulConversions.Proxies
diff --git a/src/library/LawfulConversions/Algebra.hs b/src/library/LawfulConversions/Algebra.hs
new file mode 100644
--- /dev/null
+++ b/src/library/LawfulConversions/Algebra.hs
@@ -0,0 +1,158 @@
+module LawfulConversions.Algebra where
+
+import LawfulConversions.Prelude
+
+-- |
+-- Evidence that all values of type @b@ form a subset of all values of type @a@.
+--
+-- [From Wikipedia](https://en.wikipedia.org/wiki/Subset):
+--
+-- In mathematics, a set A is a subset of a set B if all elements of A are also elements of B; B is then a superset of A. It is possible for A and B to be equal; if they are unequal, then A is a proper subset of B. The relationship of one set being a subset of another is called inclusion (or sometimes containment). A is a subset of B may also be expressed as B includes (or contains) A or A is included (or contained) in B. A k-subset is a subset with k elements.
+--
+-- === Laws
+--
+-- ==== 'to' is [injective](https://en.wikipedia.org/wiki/Injective_function)
+--
+-- For every two values of type @b@ that are not equal converting with 'to' produces values that are not equal as well:
+--
+-- > \(b1, b2) -> b1 == b2 || to @a b1 /= to @a b2
+--
+-- ==== 'maybeFrom' is a [partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'
+--
+-- For all values of @b@ converting to @a@ and then attempting to convert back to @b@ always succeeds and produces a value that is equal to the original:
+--
+-- > \b -> maybeFrom (to @a b) == Just b
+--
+-- === Testing
+--
+-- For testing whether your instances conform to these laws use 'LawfulConversions.isSomeProperties'.
+class IsSome a b where
+  -- |
+  -- Convert a value of a subset type to a superset type.
+  to :: b -> a
+
+  -- |
+  -- [Partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'.
+  maybeFrom :: a -> Maybe b
+
+  -- |
+  -- Requires the presence of 'IsSome' in reverse direction.
+  default maybeFrom :: (IsSome b a) => a -> Maybe b
+  maybeFrom = Just . to
+
+-- | Every type is isomorphic to itself.
+instance IsSome a a where
+  to = id
+  maybeFrom = Just . id
+
+-- | The empty set has no elements, and therefore is vacuously a subset of any set.
+instance IsSome a Void where
+  to = absurd
+  maybeFrom = const Nothing
+
+-- |
+-- Lossy or canonicalizing conversion.
+-- Captures mappings from multiple alternative inputs into one output.
+--
+-- E.g.,
+--
+-- - `ByteString` can be decoded into `Text` with UTF-8 leniently, replacing the invalid chars with a default char.
+--
+-- - `String` has a wider range of supported chars than `Text`, so some chars get replaced too.
+--
+-- === Laws
+--
+-- ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'
+--
+-- > \b -> b == from (to @a b)
+--
+-- === Testing
+--
+-- For testing whether your instances conform to these laws use 'LawfulConversions.isManyProperties'.
+class (IsSome a b) => IsMany a b where
+  -- |
+  -- Possibly lossy inverse of 'to'.
+  -- [Surjection](https://en.wikipedia.org/wiki/Surjective_function) from @a@ to @b@.
+  --
+  -- Particularly useful in combination with the @TypeApplications@ extension,
+  -- where it allows to specify the input type, e.g.:
+  --
+  -- > fromText :: IsMany Text b => Text -> b
+  -- > fromText = from @Text
+  --
+  -- The first type application of the 'to' function on the other hand specifies
+  -- the output data type.
+  --
+  -- If you want to specify the output type instead, use 'onto'.
+  from :: a -> b
+
+  -- |
+  -- Requires the presence of 'IsSome' in reverse direction.
+  default from :: (IsSome b a) => a -> b
+  from = to
+
+-- |
+-- Alias to 'from', which lets you specify the target type of the conversion first using @TypeApplications@.
+--
+-- In mathematics @onto@ is another name for [Surjective function](https://en.wikipedia.org/wiki/Surjective_function).
+--
+-- E.g.,
+--
+-- > lenientDecodeUtf8 = onto @Text
+onto :: forall b a. (IsMany a b) => a -> b
+onto = from
+
+instance IsMany a a
+
+-- | Bidirectional conversion between two types with no loss of information.
+--
+-- The bidirectionality is encoded via a recursive dependency with arguments
+-- flipped.
+--
+-- You can read the signature @Is a b@ as \"/B/ is /A/\".
+--
+-- === Laws
+--
+-- ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'
+--
+-- For all values of /b/ converting from /b/ to /a/ and then converting from /a/ to /b/ produces the original value:
+--
+-- > \b -> b == from (to @a b)
+--
+-- ==== 'to' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'from'
+--
+-- For all values of /a/ converting from /a/ to /b/ and then converting from /b/ to /a/ produces the original value:
+--
+-- > \a -> a == to (from @a @b a)
+--
+-- === Testing
+--
+-- For testing whether your instances conform to these laws use 'LawfulConversions.isProperties'.
+--
+-- === Instance Definition
+--
+-- For each pair of isomorphic types (/A/ and /B/) the compiler will require you to define six instances, namely: @Is A B@ and @Is B A@, @IsMany A B@ and @IsMany B A@, @IsSome A B@ and @IsSome B A@.
+--
+-- Instances of @Is@ do not define any functions and serve merely as a statement that the laws are satisfied.
+--
+-- ==== Example: Lazy Text and Text
+--
+-- @
+-- instance IsSome "Data.Text.Lazy.LazyText" "Data.Text.Text" where
+--   to = LazyText.'Data.Text.Lazy.fromStrict'
+--
+-- instance IsSome "Data.Text.Text" "Data.Text.Lazy.LazyText" where
+--   to = LazyText.'Data.Text.Lazy.toStrict'
+--
+-- instance IsMany "Data.Text.Lazy.LazyText" "Data.Text.Text"
+--
+-- instance IsMany "Data.Text.Text" "Data.Text.Lazy.LazyText"
+--
+-- instance Is "Data.Text.Lazy.LazyText" "Data.Text.Text"
+--
+-- instance Is "Data.Text.Text" "Data.Text.Lazy.LazyText"
+-- @
+class (IsMany a b, Is b a) => Is a b
+
+-- | Any type is isomorphic to itself.
+instance Is a a
diff --git a/src/library/LawfulConversions/Classes.hs b/src/library/LawfulConversions/Classes.hs
deleted file mode 100644
--- a/src/library/LawfulConversions/Classes.hs
+++ /dev/null
@@ -1,158 +0,0 @@
-module LawfulConversions.Classes where
-
-import LawfulConversions.Prelude
-
--- |
--- Evidence that all values of type @b@ form a subset of all values of type @a@.
---
--- [From Wikipedia](https://en.wikipedia.org/wiki/Subset):
---
--- In mathematics, a set A is a subset of a set B if all elements of A are also elements of B; B is then a superset of A. It is possible for A and B to be equal; if they are unequal, then A is a proper subset of B. The relationship of one set being a subset of another is called inclusion (or sometimes containment). A is a subset of B may also be expressed as B includes (or contains) A or A is included (or contained) in B. A k-subset is a subset with k elements.
---
--- === Laws
---
--- ==== 'to' is [injective](https://en.wikipedia.org/wiki/Injective_function)
---
--- For every two values of type @b@ that are not equal converting with 'to' produces values that are not equal as well:
---
--- > \(b1, b2) -> b1 == b2 || to @a b1 /= to @a b2
---
--- ==== 'maybeFrom' is a [partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'
---
--- For all values of @b@ converting to @a@ and then attempting to convert back to @b@ always succeeds and produces a value that is equal to the original:
---
--- > \b -> maybeFrom (to @a b) == Just b
---
--- === Testing
---
--- For testing whether your instances conform to these laws use 'LawfulConversions.isSomeProperties'.
-class IsSome a b where
-  -- |
-  -- Convert a value of a subset type to a superset type.
-  to :: b -> a
-
-  -- |
-  -- [Partial inverse](https://en.wikipedia.org/wiki/Inverse_function#Partial_inverses) of 'to'.
-  maybeFrom :: a -> Maybe b
-
-  -- |
-  -- Requires the presence of 'IsSome' in reverse direction.
-  default maybeFrom :: (IsSome b a) => a -> Maybe b
-  maybeFrom = Just . to
-
--- | Every type is isomorphic to itself.
-instance IsSome a a where
-  to = id
-  maybeFrom = Just . id
-
--- | The empty set has no elements, and therefore is vacuously a subset of any set.
-instance IsSome a Void where
-  to = absurd
-  maybeFrom = const Nothing
-
--- |
--- Lossy or canonicalizing conversion.
--- Captures mappings from multiple alternative inputs into one output.
---
--- E.g.,
---
--- - `ByteString` can be decoded into `Text` with UTF-8 leniently, replacing the invalid chars with a default char.
---
--- - `String` has a wider range of supported chars than `Text`, so some chars get replaced too.
---
--- === Laws
---
--- ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'
---
--- > \b -> b == from (to @a b)
---
--- === Testing
---
--- For testing whether your instances conform to these laws use 'LawfulConversions.isManyProperties'.
-class (IsSome a b) => IsMany a b where
-  -- |
-  -- Possibly lossy inverse of 'to'.
-  -- [Surjection](https://en.wikipedia.org/wiki/Surjective_function) from @a@ to @b@.
-  --
-  -- Particularly useful in combination with the @TypeApplications@ extension,
-  -- where it allows to specify the input type, e.g.:
-  --
-  -- > fromText :: IsMany Text b => Text -> b
-  -- > fromText = from @Text
-  --
-  -- The first type application of the 'to' function on the other hand specifies
-  -- the output data type.
-  --
-  -- If you want to specify the output type instead, use 'onto'.
-  from :: a -> b
-
-  -- |
-  -- Requires the presence of 'IsSome' in reverse direction.
-  default from :: (IsSome b a) => a -> b
-  from = to
-
--- |
--- Alias to 'from', which lets you specify the target type of the conversion first using @TypeApplications@.
---
--- In mathematics @onto@ is another name for [Surjective function](https://en.wikipedia.org/wiki/Surjective_function).
---
--- E.g.,
---
--- > lenientDecodeUtf8 = onto @Text
-onto :: forall b a. (IsMany a b) => a -> b
-onto = from
-
-instance IsMany a a
-
--- | Bidirectional conversion between two types with no loss of information.
---
--- The bidirectionality is encoded via a recursive dependency with arguments
--- flipped.
---
--- You can read the signature @Is a b@ as \"/B/ is /A/\".
---
--- === Laws
---
--- ==== 'from' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'to'
---
--- For all values of /b/ converting from /b/ to /a/ and then converting from /a/ to /b/ produces the original value:
---
--- > \b -> b == from (to @a b)
---
--- ==== 'to' is an [inverse](https://en.wikipedia.org/wiki/Inverse_function) of 'from'
---
--- For all values of /a/ converting from /a/ to /b/ and then converting from /b/ to /a/ produces the original value:
---
--- > \a -> a == to (from @a @b a)
---
--- === Testing
---
--- For testing whether your instances conform to these laws use 'LawfulConversions.isProperties'.
---
--- === Instance Definition
---
--- For each pair of isomorphic types (/A/ and /B/) the compiler will require you to define six instances, namely: @Is A B@ and @Is B A@, @IsMany A B@ and @IsMany B A@, @IsSome A B@ and @IsSome B A@.
---
--- Instances of @Is@ do not define any functions and serve merely as a statement that the laws are satisfied.
---
--- ==== Example: Lazy Text and Text
---
--- @
--- instance IsSome "Data.Text.Lazy.LazyText" "Data.Text.Text" where
---   to = LazyText.'Data.Text.Lazy.fromStrict'
---
--- instance IsSome "Data.Text.Text" "Data.Text.Lazy.LazyText" where
---   to = LazyText.'Data.Text.Lazy.toStrict'
---
--- instance IsMany "Data.Text.Lazy.LazyText" "Data.Text.Text"
---
--- instance IsMany "Data.Text.Text" "Data.Text.Lazy.LazyText"
---
--- instance Is "Data.Text.Lazy.LazyText" "Data.Text.Text"
---
--- instance Is "Data.Text.Text" "Data.Text.Lazy.LazyText"
--- @
-class (IsMany a b, Is b a) => Is a b
-
--- | Any type is isomorphic to itself.
-instance Is a a
diff --git a/src/library/LawfulConversions/Optics.hs b/src/library/LawfulConversions/Optics.hs
--- a/src/library/LawfulConversions/Optics.hs
+++ b/src/library/LawfulConversions/Optics.hs
@@ -1,7 +1,7 @@
 module LawfulConversions.Optics where
 
 import Data.Profunctor
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | Van-Laarhoven-style Prism, compatible with libraries like \"lens\" and \"optics\".
diff --git a/src/library/LawfulConversions/Properties.hs b/src/library/LawfulConversions/Properties.hs
--- a/src/library/LawfulConversions/Properties.hs
+++ b/src/library/LawfulConversions/Properties.hs
@@ -5,7 +5,7 @@
   )
 where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import Test.QuickCheck
 
@@ -54,15 +54,26 @@
 -- >       (uncurry prop)
 -- >       (isManyProperties @String @Text Proxy Proxy)
 isManyProperties ::
-  (IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary b) =>
+  (IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) =>
   Proxy a ->
   Proxy b ->
   [(String, Property)]
 isManyProperties aProxy bProxy =
-  ( "'from' is an inverse of 'to'",
-    property \b -> b === from' (to' b)
-  )
-    : isSomeProperties aProxy bProxy
+  [ ( "'from' is an inverse of 'to'",
+      property \b -> b === from' (to' b)
+    ),
+    ( "'from' is consistent with 'maybeFrom'",
+      property \a -> case maybeFrom a of
+        Nothing -> property Discard
+        Just b -> b === from' a
+    ),
+    ( "'to' after 'from' always succeeds with 'maybeFrom'",
+      property \a ->
+        let b = from' a
+         in maybeFrom (to' b) === Just b
+    )
+  ]
+    <> isSomeProperties aProxy bProxy
   where
     to' = as aProxy . to . as bProxy
     from' = as bProxy . from . as aProxy
diff --git a/src/library/LawfulConversions/Proxies/ViaIsSome.hs b/src/library/LawfulConversions/Proxies/ViaIsSome.hs
--- a/src/library/LawfulConversions/Proxies/ViaIsSome.hs
+++ b/src/library/LawfulConversions/Proxies/ViaIsSome.hs
@@ -1,6 +1,6 @@
 module LawfulConversions.Proxies.ViaIsSome where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified Test.QuickCheck as QuickCheck
 
diff --git a/src/library/LawfulConversions/Relations/BoxedVectorAndList.hs b/src/library/LawfulConversions/Relations/BoxedVectorAndList.hs
--- a/src/library/LawfulConversions/Relations/BoxedVectorAndList.hs
+++ b/src/library/LawfulConversions/Relations/BoxedVectorAndList.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.BoxedVectorAndList where
 
 import qualified Data.Vector
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome (Vector a) [a] where
diff --git a/src/library/LawfulConversions/Relations/BoxedVectorAndSeq.hs b/src/library/LawfulConversions/Relations/BoxedVectorAndSeq.hs
--- a/src/library/LawfulConversions/Relations/BoxedVectorAndSeq.hs
+++ b/src/library/LawfulConversions/Relations/BoxedVectorAndSeq.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Sequence
 import qualified Data.Vector
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome (Vector a) (Seq a) where
diff --git a/src/library/LawfulConversions/Relations/ByteArrayAndByteString.hs b/src/library/LawfulConversions/Relations/ByteArrayAndByteString.hs
--- a/src/library/LawfulConversions/Relations/ByteArrayAndByteString.hs
+++ b/src/library/LawfulConversions/Relations/ByteArrayAndByteString.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.ByteString.Short
 import qualified Data.Primitive.ByteArray
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.ByteArrayAndShortByteString ()
 import LawfulConversions.Relations.ByteStringAndShortByteString ()
diff --git a/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteString.hs b/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteString.hs
--- a/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteString.hs
+++ b/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteString.hs
@@ -5,7 +5,7 @@
 import qualified Data.ByteString.Lazy
 import qualified Data.ByteString.Short
 import qualified Data.Primitive.ByteArray
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.ByteArrayAndShortByteString ()
 import LawfulConversions.Relations.LazyByteStringAndShortByteString ()
diff --git a/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteStringBuilder.hs b/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteStringBuilder.hs
--- a/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteStringBuilder.hs
+++ b/src/library/LawfulConversions/Relations/ByteArrayAndLazyByteStringBuilder.hs
@@ -5,7 +5,7 @@
 import qualified Data.ByteString.Builder
 import qualified Data.ByteString.Short
 import qualified Data.Primitive.ByteArray
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.ByteArrayAndShortByteString ()
 import LawfulConversions.Relations.LazyByteStringBuilderAndShortByteString ()
diff --git a/src/library/LawfulConversions/Relations/ByteArrayAndShortByteString.hs b/src/library/LawfulConversions/Relations/ByteArrayAndShortByteString.hs
--- a/src/library/LawfulConversions/Relations/ByteArrayAndShortByteString.hs
+++ b/src/library/LawfulConversions/Relations/ByteArrayAndShortByteString.hs
@@ -5,7 +5,7 @@
 import qualified Data.ByteString.Short
 import qualified Data.ByteString.Short.Internal
 import qualified Data.Primitive.ByteArray
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 
 instance IsSome Data.ByteString.Short.ShortByteString Data.Primitive.ByteArray.ByteArray where
   to (Data.Primitive.ByteArray.ByteArray array) =
diff --git a/src/library/LawfulConversions/Relations/ByteArrayAndTextArray.hs b/src/library/LawfulConversions/Relations/ByteArrayAndTextArray.hs
--- a/src/library/LawfulConversions/Relations/ByteArrayAndTextArray.hs
+++ b/src/library/LawfulConversions/Relations/ByteArrayAndTextArray.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.Primitive.ByteArray
 import qualified Data.Text.Array
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified LawfulConversions.TextCompat.Array
 
diff --git a/src/library/LawfulConversions/Relations/ByteArrayAndWord8List.hs b/src/library/LawfulConversions/Relations/ByteArrayAndWord8List.hs
--- a/src/library/LawfulConversions/Relations/ByteArrayAndWord8List.hs
+++ b/src/library/LawfulConversions/Relations/ByteArrayAndWord8List.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.ByteArrayAndWord8List where
 
 import qualified Data.Primitive.ByteArray
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.ByteArrayAndShortByteString ()
 
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndLazyByteString.hs b/src/library/LawfulConversions/Relations/ByteStringAndLazyByteString.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndLazyByteString.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndLazyByteString.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.ByteStringAndLazyByteString where
 
 import qualified Data.ByteString.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome ByteString Data.ByteString.Lazy.ByteString where
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndLazyByteStringBuilder.hs b/src/library/LawfulConversions/Relations/ByteStringAndLazyByteStringBuilder.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndLazyByteStringBuilder.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndLazyByteStringBuilder.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.ByteString.Builder
 import qualified Data.ByteString.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome ByteString Data.ByteString.Builder.Builder where
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndLazyText.hs b/src/library/LawfulConversions/Relations/ByteStringAndLazyText.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndLazyText.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndLazyText.hs
@@ -6,7 +6,7 @@
 import qualified Data.Text.Encoding.Error
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | UTF-8 codec.
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndShortByteString.hs b/src/library/LawfulConversions/Relations/ByteStringAndShortByteString.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndShortByteString.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndShortByteString.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.ByteStringAndShortByteString where
 
 import qualified Data.ByteString.Short
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome ByteString Data.ByteString.Short.ShortByteString where
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndString.hs b/src/library/LawfulConversions/Relations/ByteStringAndString.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndString.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndString.hs
@@ -5,7 +5,7 @@
 import qualified Data.Text
 import qualified Data.Text.Encoding
 import qualified Data.Text.Encoding.Error
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | UTF-8 codec.
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndText.hs b/src/library/LawfulConversions/Relations/ByteStringAndText.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndText.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndText.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Encoding
 import qualified Data.Text.Encoding.Error
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | UTF-8 codec.
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndTextArray.hs b/src/library/LawfulConversions/Relations/ByteStringAndTextArray.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndTextArray.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndTextArray.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.ByteString.Short
 import qualified Data.Text.Array
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified LawfulConversions.TextCompat.Array
 
diff --git a/src/library/LawfulConversions/Relations/ByteStringAndWord8List.hs b/src/library/LawfulConversions/Relations/ByteStringAndWord8List.hs
--- a/src/library/LawfulConversions/Relations/ByteStringAndWord8List.hs
+++ b/src/library/LawfulConversions/Relations/ByteStringAndWord8List.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.ByteStringAndWord8List where
 
 import qualified Data.ByteString
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome ByteString [Word8] where
diff --git a/src/library/LawfulConversions/Relations/DayAndLazyText.hs b/src/library/LawfulConversions/Relations/DayAndLazyText.hs
--- a/src/library/LawfulConversions/Relations/DayAndLazyText.hs
+++ b/src/library/LawfulConversions/Relations/DayAndLazyText.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.DayAndString ()
 import LawfulConversions.Relations.LazyTextAndString ()
diff --git a/src/library/LawfulConversions/Relations/DayAndLazyTextBuilder.hs b/src/library/LawfulConversions/Relations/DayAndLazyTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/DayAndLazyTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/DayAndLazyTextBuilder.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy.Builder
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.DayAndString ()
 import LawfulConversions.Relations.LazyTextBuilderAndString ()
diff --git a/src/library/LawfulConversions/Relations/DayAndStrictTextBuilder.hs b/src/library/LawfulConversions/Relations/DayAndStrictTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/DayAndStrictTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/DayAndStrictTextBuilder.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.Text.Encoding
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StrictTextBuilderAndString ()
 import LawfulConversions.Relations.StringAndText ()
@@ -22,7 +22,7 @@
 
 import qualified Data.Text.Encoding
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StrictTextBuilderAndString ()
 import LawfulConversions.Relations.StringAndText ()
diff --git a/src/library/LawfulConversions/Relations/DayAndString.hs b/src/library/LawfulConversions/Relations/DayAndString.hs
--- a/src/library/LawfulConversions/Relations/DayAndString.hs
+++ b/src/library/LawfulConversions/Relations/DayAndString.hs
@@ -4,7 +4,7 @@
 
 import Data.Time
 import Data.Time.Format.ISO8601
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | Implements ISO-8601.
diff --git a/src/library/LawfulConversions/Relations/DayAndText.hs b/src/library/LawfulConversions/Relations/DayAndText.hs
--- a/src/library/LawfulConversions/Relations/DayAndText.hs
+++ b/src/library/LawfulConversions/Relations/DayAndText.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.DayAndText where
 
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.DayAndString ()
 import LawfulConversions.Relations.StringAndText ()
diff --git a/src/library/LawfulConversions/Relations/Int16AndWord16.hs b/src/library/LawfulConversions/Relations/Int16AndWord16.hs
--- a/src/library/LawfulConversions/Relations/Int16AndWord16.hs
+++ b/src/library/LawfulConversions/Relations/Int16AndWord16.hs
@@ -2,7 +2,7 @@
 
 module LawfulConversions.Relations.Int16AndWord16 where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Int16 Word16 where
diff --git a/src/library/LawfulConversions/Relations/Int32AndWord32.hs b/src/library/LawfulConversions/Relations/Int32AndWord32.hs
--- a/src/library/LawfulConversions/Relations/Int32AndWord32.hs
+++ b/src/library/LawfulConversions/Relations/Int32AndWord32.hs
@@ -2,7 +2,7 @@
 
 module LawfulConversions.Relations.Int32AndWord32 where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Int32 Word32 where
diff --git a/src/library/LawfulConversions/Relations/Int64AndWord64.hs b/src/library/LawfulConversions/Relations/Int64AndWord64.hs
--- a/src/library/LawfulConversions/Relations/Int64AndWord64.hs
+++ b/src/library/LawfulConversions/Relations/Int64AndWord64.hs
@@ -2,7 +2,7 @@
 
 module LawfulConversions.Relations.Int64AndWord64 where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Int64 Word64 where
diff --git a/src/library/LawfulConversions/Relations/Int8AndWord8.hs b/src/library/LawfulConversions/Relations/Int8AndWord8.hs
--- a/src/library/LawfulConversions/Relations/Int8AndWord8.hs
+++ b/src/library/LawfulConversions/Relations/Int8AndWord8.hs
@@ -2,7 +2,7 @@
 
 module LawfulConversions.Relations.Int8AndWord8 where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Int8 Word8 where
diff --git a/src/library/LawfulConversions/Relations/IntAndWord.hs b/src/library/LawfulConversions/Relations/IntAndWord.hs
--- a/src/library/LawfulConversions/Relations/IntAndWord.hs
+++ b/src/library/LawfulConversions/Relations/IntAndWord.hs
@@ -2,7 +2,7 @@
 
 module LawfulConversions.Relations.IntAndWord where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Int Word where
diff --git a/src/library/LawfulConversions/Relations/IntMapAndMapOfInt.hs b/src/library/LawfulConversions/Relations/IntMapAndMapOfInt.hs
--- a/src/library/LawfulConversions/Relations/IntMapAndMapOfInt.hs
+++ b/src/library/LawfulConversions/Relations/IntMapAndMapOfInt.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.IntMap.Strict
 import qualified Data.Map.Strict
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome (Map Int v) (IntMap v) where
diff --git a/src/library/LawfulConversions/Relations/IntSetAndSetOfInt.hs b/src/library/LawfulConversions/Relations/IntSetAndSetOfInt.hs
--- a/src/library/LawfulConversions/Relations/IntSetAndSetOfInt.hs
+++ b/src/library/LawfulConversions/Relations/IntSetAndSetOfInt.hs
@@ -2,7 +2,7 @@
 
 module LawfulConversions.Relations.IntSetAndSetOfInt where
 
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome (Set Int) IntSet where
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndLazyByteStringBuilder.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndLazyByteStringBuilder.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndLazyByteStringBuilder.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndLazyByteStringBuilder.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.ByteString.Builder
 import qualified Data.ByteString.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 
 instance IsSome Data.ByteString.Lazy.ByteString Data.ByteString.Builder.Builder where
   to = Data.ByteString.Builder.toLazyByteString
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndLazyText.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndLazyText.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndLazyText.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndLazyText.hs
@@ -6,7 +6,7 @@
 import qualified Data.Text.Encoding.Error
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | UTF-8 codec.
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndShortByteString.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndShortByteString.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndShortByteString.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndShortByteString.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.ByteString.Lazy
 import qualified Data.ByteString.Short
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.ByteString.Lazy.ByteString Data.ByteString.Short.ShortByteString where
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndString.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndString.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndString.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndString.hs
@@ -6,7 +6,7 @@
 import qualified Data.Text.Encoding.Error
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | UTF-8 codec.
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndText.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndText.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndText.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndText.hs
@@ -7,7 +7,7 @@
 import qualified Data.Text.Encoding.Error
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | UTF-8 codec.
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndTextArray.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndTextArray.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndTextArray.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndTextArray.hs
@@ -8,7 +8,7 @@
 import qualified Data.ByteString.Lazy
 import qualified Data.ByteString.Short
 import qualified Data.Text.Array
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified LawfulConversions.TextCompat.Array
 
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringAndWord8List.hs b/src/library/LawfulConversions/Relations/LazyByteStringAndWord8List.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringAndWord8List.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringAndWord8List.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.LazyByteStringAndWord8List where
 
 import qualified Data.ByteString.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.ByteString.Lazy.ByteString [Word8] where
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndShortByteString.hs b/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndShortByteString.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndShortByteString.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndShortByteString.hs
@@ -5,7 +5,7 @@
 import qualified Data.ByteString.Builder
 import qualified Data.ByteString.Lazy
 import qualified Data.ByteString.Short
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.ByteString.Builder.Builder Data.ByteString.Short.ShortByteString where
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndTextArray.hs b/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndTextArray.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndTextArray.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndTextArray.hs
@@ -9,7 +9,7 @@
 import qualified Data.ByteString.Lazy
 import qualified Data.ByteString.Short
 import qualified Data.Text.Array
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified LawfulConversions.TextCompat.Array
 
diff --git a/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndWord8List.hs b/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndWord8List.hs
--- a/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndWord8List.hs
+++ b/src/library/LawfulConversions/Relations/LazyByteStringBuilderAndWord8List.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.ByteString.Builder
 import qualified Data.ByteString.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.ByteString.Builder.Builder [Word8] where
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndLazyTextBuilder.hs b/src/library/LawfulConversions/Relations/LazyTextAndLazyTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndLazyTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndLazyTextBuilder.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Builder
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Text Data.Text.Lazy.Builder.Builder where
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs b/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndStrictTextBuilder.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.Text.Encoding
 import qualified Data.Text.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Text Data.Text.Encoding.StrictTextBuilder where
@@ -28,7 +28,7 @@
 
 import qualified Data.Text.Encoding
 import qualified Data.Text.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Text Data.Text.Encoding.StrictBuilder where
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndString.hs b/src/library/LawfulConversions/Relations/LazyTextAndString.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndString.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndString.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.LazyTextAndString where
 
 import qualified Data.Text.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StringAndText ()
 
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndText.hs b/src/library/LawfulConversions/Relations/LazyTextAndText.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndText.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndText.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.LazyTextAndText where
 
 import qualified Data.Text.Lazy
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Text Text where
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs b/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndUtcTime.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.LazyTextAndString ()
 import LawfulConversions.Relations.StringAndUtcTime ()
diff --git a/src/library/LawfulConversions/Relations/LazyTextAndUuid.hs b/src/library/LawfulConversions/Relations/LazyTextAndUuid.hs
--- a/src/library/LawfulConversions/Relations/LazyTextAndUuid.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextAndUuid.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy
 import qualified Data.UUID.Types
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Text UUID where
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs
--- a/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndStrictTextBuilder.hs
@@ -8,7 +8,7 @@
 import qualified Data.Text.Encoding
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Builder
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictTextBuilder where
@@ -30,7 +30,7 @@
 import qualified Data.Text.Encoding
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Builder
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Builder.Builder Data.Text.Encoding.StrictBuilder where
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndString.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndString.hs
--- a/src/library/LawfulConversions/Relations/LazyTextBuilderAndString.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndString.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Builder
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StringAndText ()
 
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndText.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndText.hs
--- a/src/library/LawfulConversions/Relations/LazyTextBuilderAndText.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndText.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Builder
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Builder.Builder Text where
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs
--- a/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndUtcTime.hs
@@ -4,7 +4,7 @@
 
 import qualified Data.Text.Lazy.Builder
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.LazyTextBuilderAndString ()
 import LawfulConversions.Relations.StringAndUtcTime ()
diff --git a/src/library/LawfulConversions/Relations/LazyTextBuilderAndUuid.hs b/src/library/LawfulConversions/Relations/LazyTextBuilderAndUuid.hs
--- a/src/library/LawfulConversions/Relations/LazyTextBuilderAndUuid.hs
+++ b/src/library/LawfulConversions/Relations/LazyTextBuilderAndUuid.hs
@@ -5,7 +5,7 @@
 import qualified Data.Text.Lazy
 import qualified Data.Text.Lazy.Builder
 import qualified Data.UUID.Types
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Lazy.Builder.Builder UUID where
diff --git a/src/library/LawfulConversions/Relations/ListAndSeq.hs b/src/library/LawfulConversions/Relations/ListAndSeq.hs
--- a/src/library/LawfulConversions/Relations/ListAndSeq.hs
+++ b/src/library/LawfulConversions/Relations/ListAndSeq.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.ListAndSeq where
 
 import qualified Data.Sequence
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome [a] (Seq a) where
diff --git a/src/library/LawfulConversions/Relations/ShortByteStringAndTextArray.hs b/src/library/LawfulConversions/Relations/ShortByteStringAndTextArray.hs
--- a/src/library/LawfulConversions/Relations/ShortByteStringAndTextArray.hs
+++ b/src/library/LawfulConversions/Relations/ShortByteStringAndTextArray.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.ByteString.Short
 import qualified Data.Text.Array
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified LawfulConversions.TextCompat.Array
 
diff --git a/src/library/LawfulConversions/Relations/ShortByteStringAndWord8List.hs b/src/library/LawfulConversions/Relations/ShortByteStringAndWord8List.hs
--- a/src/library/LawfulConversions/Relations/ShortByteStringAndWord8List.hs
+++ b/src/library/LawfulConversions/Relations/ShortByteStringAndWord8List.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.ShortByteStringAndWord8List where
 
 import qualified Data.ByteString.Short
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.ByteArrayAndShortByteString ()
 
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndString.hs
@@ -6,7 +6,7 @@
 #if MIN_VERSION_text(2,1,2)
 
 import qualified Data.Text.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Relations.StringAndText ()
 import LawfulConversions.Prelude
 
@@ -20,7 +20,7 @@
 #elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.Text.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Relations.StringAndText ()
 import LawfulConversions.Prelude
 
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndText.hs
@@ -6,7 +6,7 @@
 #if MIN_VERSION_text(2,1,2)
 
 import qualified Data.Text.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Text Data.Text.Encoding.StrictTextBuilder where
@@ -26,7 +26,7 @@
 #elif MIN_VERSION_text(2,0,2)
 
 import qualified Data.Text.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Text Data.Text.Encoding.StrictBuilder where
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUtcTime.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.Text.Encoding
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StrictTextBuilderAndString ()
 import LawfulConversions.Relations.StringAndText ()
@@ -22,7 +22,7 @@
 
 import qualified Data.Text.Encoding
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StrictTextBuilderAndString ()
 import LawfulConversions.Relations.StringAndText ()
diff --git a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs
--- a/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs
+++ b/src/library/LawfulConversions/Relations/StrictTextBuilderAndUuid.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.UUID.Types
 import qualified Data.Text.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Encoding.StrictTextBuilder UUID where
@@ -18,7 +18,7 @@
 
 import qualified Data.UUID.Types
 import qualified Data.Text.Encoding
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Data.Text.Encoding.StrictBuilder UUID where
diff --git a/src/library/LawfulConversions/Relations/StringAndText.hs b/src/library/LawfulConversions/Relations/StringAndText.hs
--- a/src/library/LawfulConversions/Relations/StringAndText.hs
+++ b/src/library/LawfulConversions/Relations/StringAndText.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.StringAndText where
 
 import qualified Data.Text as Text
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome String Text where
diff --git a/src/library/LawfulConversions/Relations/StringAndUtcTime.hs b/src/library/LawfulConversions/Relations/StringAndUtcTime.hs
--- a/src/library/LawfulConversions/Relations/StringAndUtcTime.hs
+++ b/src/library/LawfulConversions/Relations/StringAndUtcTime.hs
@@ -4,7 +4,7 @@
 
 import Data.Time
 import Data.Time.Format.ISO8601
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 -- | Implements ISO-8601.
diff --git a/src/library/LawfulConversions/Relations/StringAndUuid.hs b/src/library/LawfulConversions/Relations/StringAndUuid.hs
--- a/src/library/LawfulConversions/Relations/StringAndUuid.hs
+++ b/src/library/LawfulConversions/Relations/StringAndUuid.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.StringAndUuid where
 
 import qualified Data.UUID.Types
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome String UUID where
diff --git a/src/library/LawfulConversions/Relations/TextAndUtcTime.hs b/src/library/LawfulConversions/Relations/TextAndUtcTime.hs
--- a/src/library/LawfulConversions/Relations/TextAndUtcTime.hs
+++ b/src/library/LawfulConversions/Relations/TextAndUtcTime.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.TextAndUtcTime where
 
 import Data.Time
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import LawfulConversions.Relations.StringAndText ()
 import LawfulConversions.Relations.StringAndUtcTime ()
diff --git a/src/library/LawfulConversions/Relations/TextAndUuid.hs b/src/library/LawfulConversions/Relations/TextAndUuid.hs
--- a/src/library/LawfulConversions/Relations/TextAndUuid.hs
+++ b/src/library/LawfulConversions/Relations/TextAndUuid.hs
@@ -3,7 +3,7 @@
 module LawfulConversions.Relations.TextAndUuid where
 
 import qualified Data.UUID.Types as Uuid
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 
 instance IsSome Text UUID where
diff --git a/src/library/LawfulConversions/Relations/TextArrayAndWord8List.hs b/src/library/LawfulConversions/Relations/TextArrayAndWord8List.hs
--- a/src/library/LawfulConversions/Relations/TextArrayAndWord8List.hs
+++ b/src/library/LawfulConversions/Relations/TextArrayAndWord8List.hs
@@ -7,7 +7,7 @@
 
 import qualified Data.ByteString.Short
 import qualified Data.Text.Array
-import LawfulConversions.Classes
+import LawfulConversions.Algebra
 import LawfulConversions.Prelude
 import qualified LawfulConversions.TextCompat.Array
 
