diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -29,9 +29,7 @@
 
 ```haskell
 newtype Extinction = Extinction Int
-    deriving Generic
-    deriving newtype (Eq, Num, Show)
-    deriving anyclass Grouping
+    deriving newtype (Eq, Num, Ord, Show)
 ```
 
 Combining identical states should not change the state,
diff --git a/markov-realization.cabal b/markov-realization.cabal
--- a/markov-realization.cabal
+++ b/markov-realization.cabal
@@ -7,7 +7,7 @@
 -- hash: b164fe328e9edef0858d48e61b56997280bd4bb2ea6ffe923afb24084a14efe6
 
 name:           markov-realization
-version:        0.3.2
+version:        0.3.3
 description:    Please see the README on GitHub at <https://github.com/alexloomis/markov#markov-tutorial>
 homepage:       https://github.com/alexloomis/markov
 bug-reports:    https://github.com/alexloomis/markov/issues
@@ -37,6 +37,7 @@
       Paths_markov_realization
   hs-source-dirs:
       src
+  ghc-options: -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints
   build-depends:
       base >=4.7 && <5
     , comonad
@@ -51,6 +52,7 @@
   hs-source-dirs:
       test
   ghc-options: -threaded -rtsopts -with-rtsopts=-N
+    -Wall -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints
   build-depends:
       base >=4.7 && <5
     , HTF
diff --git a/src/Markov.hs b/src/Markov.hs
--- a/src/Markov.hs
+++ b/src/Markov.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE DeriveAnyClass             #-}
 {-# LANGUAGE DerivingStrategies         #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -38,7 +37,7 @@
 
 import Control.Comonad (Comonad, extract)
 
-import qualified Data.List as DL
+import qualified Data.List          as DL
 import qualified Data.List.NonEmpty as NE
 
 ---------------------------------------------------------------
@@ -155,3 +154,4 @@
 instance Num a => Semigroup (Product a) where x <> y = x * y
 
 instance Num a => Monoid (Product a) where mempty = 1
+
diff --git a/src/Markov/Example.hs b/src/Markov/Example.hs
--- a/src/Markov/Example.hs
+++ b/src/Markov/Example.hs
@@ -1,4 +1,3 @@
-{-# LANGUAGE DeriveAnyClass             #-}
 {-# LANGUAGE DerivingStrategies         #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
@@ -29,8 +28,8 @@
      , expectedLoss
      ) where
 
-import Markov
-import Markov.Extra
+import           Markov
+import           Markov.Extra
 import qualified Markov.Generic as MG
 
 ---------------------------------------------------------------
@@ -255,7 +254,7 @@
 
 instance Show FillBin where
     show (Ext g b s) = show g ++ " " ++ show b ++ " " ++ show s
-    show (End g) = show g
+    show (End g)     = show g
 
 instance Combine FillBin where combine = const
 
@@ -329,27 +328,27 @@
 -- @take i s ++ f (drop i s)@.
 iApply :: Trans -> Index -> Trans
 iApply f idx x = case (idx,x) of
-    (1, y) -> f y
+    (1, y)         -> f y
     (i, Ext g b s) -> Ext g b $ iApply f (i-1) s
-    _ -> error "Pattern not matched in iApply"
+    _              -> error "Pattern not matched in iApply"
 
 -- |Add an item to the ith bin.
 addItem :: Index -> Trans
 addItem = iApply h
     where h (Ext g (o,f) s) = Ext g (o-1,f+1) s
-          h _ = error "pattern not matched in h in addItem"
+          h _               = error "pattern not matched in h in addItem"
 
 -- |Expand the ith bin to the left by j.
 -- The Markov chain will use @addItem i . growLeft j i@.
 growLeft :: Int -> Index -> Trans
 growLeft j = iApply h
     where h (Ext g (o,f) s) = Ext (g-j) (o+j,f) s
-          h _ = error "pattern not matched in h in growLeft"
+          h _               = error "pattern not matched in h in growLeft"
 
 growRight :: Int -> Index -> Trans
 growRight j = iApply h
     where h (Ext g (o,f) s) = Ext g (o+j,f) (shrink s)
-          h _ = error "pattern not matched in h in growRight"
+          h _               = error "pattern not matched in h in growRight"
           shrink = \case
               End g -> End (g-j)
               Ext g b t -> Ext (g-j) b t
@@ -364,7 +363,7 @@
     | slots x == 0 = 1
     | otherwise    = 0
 
-divInt :: (Integral a, Integral b, Fractional c) => a -> b -> c
+divInt :: Fractional a => Int -> Int -> a
 divInt x y = fromIntegral x / fromIntegral y
 
 -- |The probability that the ith bin gains an item.
@@ -405,7 +404,7 @@
 --
 -- >>> expectedLoss [pure $ initial [1,0,3] :: (Product Double, FillBin)]
 -- 2.0
-expectedLoss :: (Fractional a, Ord a, Markov ((,) (Product a)) FillBin) 
+expectedLoss :: (Fractional a, Markov ((,) (Product a)) FillBin)
     => [Product a :* FillBin] -> a
 expectedLoss xs = sum . map probLoss $ chain xs !! idx
     where idx = slots . snd . head $ xs
