diff --git a/rings.cabal b/rings.cabal
--- a/rings.cabal
+++ b/rings.cabal
@@ -1,5 +1,5 @@
 name:                rings
-version:             0.1
+version:             0.1.1
 synopsis:            Ring-like objects.
 description:         Semirings, rings, division rings, and modules.
 homepage:            https://github.com/cmk/rings
@@ -14,6 +14,12 @@
 extra-source-files:  ChangeLog.md
 cabal-version:       >=1.10
 
+flag development
+    description:
+        Enable `-Werror`
+    default: False
+    manual: True
+
 library
   hs-source-dirs:   src
   default-language: Haskell2010
@@ -41,29 +47,11 @@
     , TypeOperators
 
   build-depends:       
-      base           >= 4.10
-    , lawz           >= 0.1.1
-    , adjunctions    >= 4.4
-    , containers     >= 0.4.0
-    , distributive   >= 0.3
-    , semigroupoids  >= 0.5
-    , profunctors    >= 5.0
-    , magmas         >= 0.0.1
-
-test-suite test
-  type: exitcode-stdio-1.0
-  other-modules:
-      Test.Data.Dioid.Signed
-  build-depends:       
-      base == 4.*
-    , connections -any 
-    , hedgehog
-    , property
-    , rings
-  default-extensions:
-      ScopedTypeVariables,
-      TypeApplications
-  main-is: test.hs
-  hs-source-dirs: test
-  default-language: Haskell2010
-  ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
+      base           >= 4.10  && < 5.0
+    , lawz           >= 0.1.1 && < 0.2
+    , adjunctions    >= 4.4   && < 5.0
+    , containers     >= 0.4.0 && < 1.0
+    , distributive   >= 0.3   && < 1.0
+    , semigroupoids  >= 0.5   && < 1.0
+    , profunctors    >= 5.0   && < 6.0
+    , magmas         >= 0.0.1 && < 1.0
diff --git a/test/Test/Data/Dioid/Signed.hs b/test/Test/Data/Dioid/Signed.hs
deleted file mode 100644
--- a/test/Test/Data/Dioid/Signed.hs
+++ /dev/null
@@ -1,206 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-module Test.Data.Dioid.Signed where
-
-import Prelude 
-
-import Data.Ord (Down(..))
-import Data.Prd
-import Data.Semiring
-import Data.Connection
-import Data.Dioid.Signed
-import Data.Float
-import Data.Semigroup.Quantale
-
-import qualified Data.Prd.Property as Prop
-import qualified Data.Semiring.Property as Prop
-import qualified Data.Connection.Property as Prop
-
-import Hedgehog
-import Test.Data.Float
-import Test.Property.Util
-import qualified Hedgehog.Gen as G
-import qualified Hedgehog.Range as R
-
-gen_sign :: Gen Sign
-gen_sign = G.choice $ fmap pure [Zero, Positive, Negative, Indeterminate]
-
-gen_signed :: Gen Signed
-gen_signed = Signed <$> gen_flt32'
-
-gen_unsigned :: Gen Unsigned
-gen_unsigned = Unsigned <$> gen_flt32
-
-gen_unsigned' :: Gen Unsigned
-gen_unsigned' = Unsigned <$> gen_flt32'
-
-prop_prd_signed :: Property
-prop_prd_signed = withTests 1 $ property $ do
-  x <- forAll gen_signed
-  y <- forAll gen_signed
-  z <- forAll gen_signed
-
-  assert $ Prop.reflexive_eq x
-  assert $ Prop.reflexive_le x
-  assert $ Prop.irreflexive_lt x
-  assert $ Prop.symmetric x y
-  assert $ Prop.asymmetric x y
-  assert $ Prop.antisymmetric x y
-  assert $ Prop.transitive_lt x y z
-  assert $ Prop.transitive_le x y z
-  assert $ Prop.transitive_eq x y z
-
-prop_connection_flt32_signed :: Property
-prop_connection_flt32_signed = withTests 1 $ property $ do
-  x <- forAll gen_flt32'
-  y <- forAll gen_signed
-  x' <- forAll gen_flt32'
-  y' <- forAll gen_signed
-
-  assert $ Prop.connection f32sgn x y
-  assert $ Prop.monotone' f32sgn x x'
-  assert $ Prop.monotone  f32sgn y y'
-  assert $ Prop.closed f32sgn x
-  assert $ Prop.kernel f32sgn y 
-
-prop_prd_unsigned :: Property
-prop_prd_unsigned = withTests 1000 $ property $ do
-  x <- forAll gen_unsigned'
-  y <- forAll gen_unsigned'
-  z <- forAll gen_unsigned'
-  w <- forAll gen_unsigned'
-
-  assert $ Prop.reflexive_eq x
-  assert $ Prop.reflexive_le x
-  assert $ Prop.irreflexive_lt x
-  assert $ Prop.symmetric x y
-  assert $ Prop.asymmetric x y
-  assert $ Prop.antisymmetric x y
-  assert $ Prop.transitive_lt x y z
-  assert $ Prop.transitive_le x y z
-  assert $ Prop.transitive_eq x y z
-
-  assert $ Prop.connex x y
-  assert $ Prop.semiconnex x y
-  assert $ Prop.trichotomous x y
-  assert $ Prop.chain_22 x y z w
-  assert $ Prop.chain_31 x y z w
-
-prop_semiring_unsigned :: Property
-prop_semiring_unsigned = withTests 1000 $ property $ do
-  x <- forAll gen_unsigned'
-  y <- forAll gen_unsigned'
-  z <- forAll gen_unsigned'
-
-  assert $ Prop.annihilative_multiplication x
-  assert $ Prop.neutral_addition' x
-  assert $ Prop.neutral_multiplication' x
-  assert $ Prop.associative_addition x y z
-  assert $ Prop.associative_multiplication x y z
-  assert $ Prop.distributive x y z
-
-prop_quantale_unsigned :: Property
-prop_quantale_unsigned = withTests 1000 . withShrinks 0 $ property $ do
-  x <- forAll gen_unsigned -- we do not require `residr pInf` etc
-  y <- forAll gen_unsigned'
-  z <- forAll gen_unsigned'
-
-  --assert $ Prop.connection (residl x) y z
-  assert $ Prop.connection (residr x) y z
-
-  --assert $ Prop.monotone' (residl x) y z
-  assert $ Prop.monotone' (residr x) y z
-
-  --assert $ Prop.monotone (residl x) y z
-  assert $ Prop.monotone (residr x) y z
-
-  --assert $ Prop.closed (residl x) y
-  assert $ Prop.closed (residr x) y
-
-  --assert $ Prop.kernel (residl x) y
-  assert $ Prop.kernel (residr x) y
-
-  assert $ residuated x y z
-
-
-f32ugn :: Conn Float Unsigned
-f32ugn = Conn f g where
-  f x | finite x  = Unsigned $ max 0 $ x
-      | otherwise = Unsigned x
-  g (Unsigned x) = x
-
-mono f x y = x <~ y ==> f x <~ f y
-
-{-
-u = Unsigned
-f = id :: Float -> Float
-
-x = u 2.3380933
-y = u 6.049403
-
-x = u 0.37794903
-y = u 0.3269925
-
-x = f 2.3380933
-y = f 6.049403
-
-x = f 0.37794903
-y = f 0.3269925
-
-cosaempty (residl x) y
-
-
-residl x = Conn (<>x) . (//x) $ y
-
-(//x) . (<>x) $ y
-
-x = u 1
-shift' n (Unsigned x) = Unsigned $ shift n x
-xs = flip shift' x <$> [-4,-3,-2,-1,0,1,2,3,4]
-fmap (cvn x) xs
-y = shift' 2 x
-z = shift' 4 x
-Prop.transitive_eq x y z
-
-
-fmap (cvn x) xs
-λ> fmap (Prop.semiconnex x) xs
-[True,True,False,False,True,False,False,True,True]
-λ> fmap (<~ x) xs
-[True,True,False,False,True,False,False,False,False]
-λ> fmap (~~ x) xs
-[False,False,True,True,True,True,True,False,False]
--}
-
-{-
-prop_connection_flt32_unsigned :: Property
-prop_connection_flt32_unsigned = withTests 1000 $ property $ do
-  x <- forAll gen_flt32
-  y <- forAll gen_unsigned
-  x' <- forAll gen_flt32
-  y' <- forAll gen_unsigned
-
-  assert $ Prop.connection f32ugn x y
-  assert $ Prop.monotone' f32ugn x x'
-  assert $ mono (connr f32ugn) y y'
-  assert $ Prop.closed f32ugn x
-  assert $ Prop.kernel f32ugn y 
--}
-
-{-
-prop_connection_unsigned_signed :: Property
-prop_connection_unsigned_signed = withTests 10000 $ property $ do
-  x <- forAll gen_unsigned
-  y <- forAll gen_signed
-  x' <- forAll gen_unsigned
-  y' <- forAll gen_signed
-
-  assert $ Prop.connection ugnsgn x y
-  assert $ Prop.monotone' ugnsgn x x'
-  assert $ Prop.monotone  ugnsgn y y'
-  assert $ Prop.closed ugnsgn x
-  assert $ Prop.kernel ugnsgn y 
--}
-
-
-tests :: IO Bool
-tests = checkParallel $$(discover)
diff --git a/test/test.hs b/test/test.hs
deleted file mode 100644
--- a/test/test.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-import Control.Monad
-import System.Exit (exitFailure)
-import System.IO (BufferMode(..), hSetBuffering, stdout, stderr)
-
-import qualified Test.Data.Number.Tropical as NT
-
-tests :: IO [Bool]
-tests = sequence [NT.tests]
-
-main :: IO ()
-main = do
-  hSetBuffering stdout LineBuffering
-  hSetBuffering stderr LineBuffering
-
-  results <- tests
-
-  unless (and results) exitFailure
