diff --git a/intro.cabal b/intro.cabal
--- a/intro.cabal
+++ b/intro.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           intro
-version:        0.2.0.2
+version:        0.3.0.0
 synopsis:       "Fixed Prelude" - Mostly total and safe, provides Text and Monad transformers
 description:    Intro is a modern Prelude which provides safe alternatives
                 for most of the partial functions and follows other
@@ -25,7 +25,7 @@
 copyright:      2016-2017 Daniel Mendler
 license:        MIT
 license-file:   LICENSE
-tested-with:    GHC == 7.10.3, GHC == 8.0.1
+tested-with:    GHC == 7.10.3, GHC == 8.0.1, GHC == 8.2.1
 build-type:     Simple
 cabal-version:  >= 1.10
 
@@ -42,7 +42,6 @@
   ghc-options: -Wall
   build-depends:
       base                 >= 4.8     && < 5.0
-    , bifunctors           >= 5.2     && < 5.5
     , binary               >= 0.7     && < 0.9
     , bytestring           >= 0.9     && < 0.11
     , containers           >= 0.5     && < 0.6
@@ -52,7 +51,6 @@
     , hashable             >= 1.2.5   && < 1.3
     , mtl                  >= 2.2     && < 2.3
     , safe                 >= 0.3.11  && < 0.4
-    , tagged               >= 0.8     && < 0.9
     , text                 >= 0.7     && < 1.3
     , transformers         >= 0.4     && < 0.6
     , unordered-containers >= 0.2     && < 0.3
@@ -60,6 +58,9 @@
   if impl(ghc < 8.0)
     build-depends:
         semigroups >= 0.9 && < 1
+  if impl(ghc < 8.1)
+    build-depends:
+        bifunctors >= 5.2 && < 5.5
   exposed-modules:
       Intro
   other-modules:
@@ -76,7 +77,6 @@
   ghc-options: -Wall
   build-depends:
       base                 >= 4.8     && < 5.0
-    , bifunctors           >= 5.2     && < 5.5
     , binary               >= 0.7     && < 0.9
     , bytestring           >= 0.9     && < 0.11
     , containers           >= 0.5     && < 0.6
@@ -86,31 +86,22 @@
     , hashable             >= 1.2.5   && < 1.3
     , mtl                  >= 2.2     && < 2.3
     , safe                 >= 0.3.11  && < 0.4
-    , tagged               >= 0.8     && < 0.9
     , text                 >= 0.7     && < 1.3
     , transformers         >= 0.4     && < 0.6
     , unordered-containers >= 0.2     && < 0.3
     , writer-cps-mtl       >= 0.1.1.2 && < 0.2
-    , QuickCheck
-    , aeson
-    , async
-    , attoparsec
-    , cassava
-    , contravariant
-    , filepath
     , intro
-    , lens
-    , megaparsec
-    , profunctors
-    , quickcheck-instances
+    , QuickCheck
   if impl(ghc < 8.0)
     build-depends:
         semigroups >= 0.9 && < 1
+  if impl(ghc < 8.1)
+    build-depends:
+        bifunctors >= 5.2 && < 5.5
+  if impl(ghc < 8.1)
+    build-depends:
+        lens
   other-modules:
-      AesonCompat
-      AttoparsecCompat
       BaseCompat
       LensCompat
-      LibCompat
-      MegaparsecCompat
   default-language: Haskell2010
diff --git a/src/Intro.hs b/src/Intro.hs
--- a/src/Intro.hs
+++ b/src/Intro.hs
@@ -241,8 +241,9 @@
   -- ** ByteString
   , Data.ByteString.ByteString
   , LByteString
+  , Data.ByteString.Short.ShortByteString
 
-  -- ** Conversion
+  -- ** String conversion
   , Data.String.IsString(fromString)
   , Intro.ConvertString.ConvertString(convertString)
   , Intro.ConvertString.EncodeString(encodeString, decodeString, decodeStringLenient)
@@ -263,11 +264,9 @@
   , Intro.Trustworthy.Hashable1
   , Intro.Trustworthy.Hashable2
 
-  -- ** Seq
-  , Data.Sequence.Seq
-
-  -- ** DList
+  -- ** DList and Seq
   , Intro.Trustworthy.DList
+  , Data.Sequence.Seq
 
   -- * Numeric types
 
@@ -364,7 +363,7 @@
 #endif
   , readMaybe
 
-  -- * Equality and Ordering
+  -- * Equality and ordering
 
   -- ** Eq
   , Data.Eq.Eq((==), (/=))
@@ -494,15 +493,10 @@
 
   -- ** Monad
   , Control.Monad.Monad((>>=))
-#if MIN_VERSION_base(4,9,0)
-  , Control.Monad.Fail.MonadFail
-#endif
-  , fail
   , Control.Monad.Fix.MonadFix(mfix)
   , (Control.Monad.=<<)
   , (Control.Monad.<=<)
   , (Control.Monad.>=>)
-  , Control.Monad.MonadPlus
   , Control.Monad.join
   , Control.Monad.guard
   , Control.Monad.when
@@ -539,10 +533,11 @@
   , Data.Bitraversable.bifor
   , Data.Bitraversable.bisequenceA
 
-  -- * Monad transformer
+  -- * Effects and monad transformers
   , Control.Monad.Trans.MonadTrans(lift)
 
-  -- ** MaybeT
+  -- ** MonadPlus and MaybeT
+  , Control.Monad.MonadPlus
   , Control.Monad.Trans.Maybe.MaybeT(MaybeT, runMaybeT)
   , Control.Monad.Trans.Maybe.mapMaybeT
 
@@ -625,8 +620,8 @@
 #endif
   , Intro.Trustworthy.Constraint
   , Data.Proxy.Proxy(Proxy)
-  , Data.Tagged.Tagged(Tagged)
-  , Data.Tagged.unTagged
+  --, Data.Tagged.Tagged(Tagged)
+  --, Data.Tagged.unTagged
 
   -- * IO
   , System.IO.IO
@@ -651,13 +646,19 @@
   , writeFileUtf8
   , appendFileUtf8
 
-  -- * Error and Debugging
+  -- * Error handling and debugging
+#if MIN_VERSION_base(4,9,0)
+  , Control.Monad.Fail.MonadFail
+#endif
+  , fail
   , panic
   , undefined
   , Intro.Trustworthy.trace
   , Intro.Trustworthy.traceIO
+  , Intro.Trustworthy.traceId
   , Intro.Trustworthy.traceM
   , Intro.Trustworthy.traceShow
+  , Intro.Trustworthy.traceShowId
   , Intro.Trustworthy.traceShowM
 ) where
 
@@ -695,6 +696,7 @@
 import qualified Data.Bool
 import qualified Data.ByteString
 import qualified Data.ByteString.Lazy
+import qualified Data.ByteString.Short
 import qualified Data.Either
 import qualified Data.Either.Extra
 import qualified Data.Eq
@@ -720,7 +722,6 @@
 import qualified Data.Semigroup
 import qualified Data.Sequence
 import qualified Data.Set
-import qualified Data.Tagged
 import qualified Data.Text.IO
 import qualified Data.Text.Lazy
 import qualified Data.Traversable
diff --git a/src/Intro/Trustworthy.hs b/src/Intro/Trustworthy.hs
--- a/src/Intro/Trustworthy.hs
+++ b/src/Intro/Trustworthy.hs
@@ -29,8 +29,10 @@
   , HasCallStack
   , trace
   , traceIO
+  , traceId
   , traceM
   , traceShow
+  , traceShowId
   , traceShowM
   , Data.Hashable.Lifted.Hashable1
   , Data.Hashable.Lifted.Hashable2
@@ -122,3 +124,13 @@
 traceIO :: MonadIO m => Text -> m ()
 traceIO = liftIO . Debug.Trace.traceIO . unpack
 {-# WARNING traceIO "'traceIO' remains in code" #-}
+
+-- | Like 'traceShow' but returns the shown value instead of a third value.
+traceShowId :: Show a => a -> a
+traceShowId = Debug.Trace.traceShowId
+{-# WARNING traceShowId "'traceShowId' remains in code" #-}
+
+-- | Like 'trace' but returns the message instead of a third value.
+traceId :: Text -> Text
+traceId a = Debug.Trace.trace (unpack a) a
+{-# WARNING traceId "'traceId' remains in code" #-}
diff --git a/test/AesonCompat.hs b/test/AesonCompat.hs
deleted file mode 100644
--- a/test/AesonCompat.hs
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-module AesonCompat (
-  module X
-) where
-
-import Intro as X
-import Data.Aeson as X hiding ((.:))
diff --git a/test/AttoparsecCompat.hs b/test/AttoparsecCompat.hs
deleted file mode 100644
--- a/test/AttoparsecCompat.hs
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-module AttoparsecCompat (
-  module X
-) where
-
-import Intro as X
-import Data.Attoparsec.ByteString as X hiding (take, skip, takeWhile)
diff --git a/test/LensCompat.hs b/test/LensCompat.hs
--- a/test/LensCompat.hs
+++ b/test/LensCompat.hs
@@ -1,7 +1,11 @@
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE CPP #-}
 module LensCompat (
   module X
 ) where
 
 import Intro as X
+
+#if __GLASGOW_HASKELL__ < 820
 import Control.Lens as X
+#endif
diff --git a/test/LibCompat.hs b/test/LibCompat.hs
deleted file mode 100644
--- a/test/LibCompat.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-module LibCompat (
-  module X
-) where
-
-import Control.Concurrent.Async as X
-import Data.Functor.Contravariant as X
-import Data.Csv as X hiding (lookup, (.:))
-import Data.Profunctor as X
-import Intro as X
-import System.FilePath as X
diff --git a/test/MegaparsecCompat.hs b/test/MegaparsecCompat.hs
deleted file mode 100644
--- a/test/MegaparsecCompat.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-module MegaparsecCompat (
-  module X
-) where
-
-import Intro as X
-import Text.Megaparsec.Text as X
-import Text.Megaparsec.Lexer as X
diff --git a/test/test.hs b/test/test.hs
--- a/test/test.hs
+++ b/test/test.hs
@@ -5,54 +5,67 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 module Main where
 
+import BaseCompat ()
 import Data.ByteString.Short (ShortByteString)
 import Intro
-import LibCompat ()
 import LensCompat ()
-import AesonCompat ()
-import AttoparsecCompat ()
-import MegaparsecCompat ()
 import Test.QuickCheck
-import Test.QuickCheck.Instances ()
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as LB
+import qualified Data.ByteString.Short as SB
+import qualified Data.Text as T
+import qualified Data.Text.Lazy as LT
 
+instance Arbitrary ByteString      where arbitrary = B.pack <$> arbitrary
+instance Arbitrary LB.ByteString   where arbitrary = LB.pack <$> arbitrary
+instance Arbitrary ShortByteString where arbitrary = SB.pack <$> arbitrary
+instance Arbitrary Text            where arbitrary = T.pack <$> arbitrary
+instance Arbitrary LT.Text         where arbitrary = LT.pack <$> arbitrary
+
 main :: IO ()
 main = do
-  encode (Proxy :: Proxy LText)       (Proxy :: Proxy ByteString)
-  encode (Proxy :: Proxy LText)       (Proxy :: Proxy LByteString)
-  encode (Proxy :: Proxy LText)       (Proxy :: Proxy ShortByteString)
-  encode (Proxy :: Proxy LText)       (Proxy :: Proxy [Word8])
-  encode (Proxy :: Proxy String)      (Proxy :: Proxy ByteString)
-  encode (Proxy :: Proxy String)      (Proxy :: Proxy LByteString)
-  encode (Proxy :: Proxy String)      (Proxy :: Proxy ShortByteString)
-  encode (Proxy :: Proxy String)      (Proxy :: Proxy [Word8])
-  encode (Proxy :: Proxy Text)        (Proxy :: Proxy ByteString)
-  encode (Proxy :: Proxy Text)        (Proxy :: Proxy LByteString)
-  encode (Proxy :: Proxy Text)        (Proxy :: Proxy ShortByteString)
-  encode (Proxy :: Proxy Text)        (Proxy :: Proxy [Word8])
-  iso    (Proxy :: Proxy ByteString)  (Proxy :: Proxy ByteString)
-  iso    (Proxy :: Proxy ByteString)  (Proxy :: Proxy LByteString)
-  iso    (Proxy :: Proxy ByteString)  (Proxy :: Proxy ShortByteString)
-  iso    (Proxy :: Proxy ByteString)  (Proxy :: Proxy [Word8])
-  iso    (Proxy :: Proxy LByteString) (Proxy :: Proxy ByteString)
-  iso    (Proxy :: Proxy LByteString) (Proxy :: Proxy LByteString)
-  iso    (Proxy :: Proxy LByteString) (Proxy :: Proxy ShortByteString)
-  iso    (Proxy :: Proxy LByteString) (Proxy :: Proxy [Word8])
-  iso    (Proxy :: Proxy LText)       (Proxy :: Proxy LText)
-  iso    (Proxy :: Proxy LText)       (Proxy :: Proxy String)
-  iso    (Proxy :: Proxy LText)       (Proxy :: Proxy Text)
-  iso    (Proxy :: Proxy String)      (Proxy :: Proxy LText)
-  iso    (Proxy :: Proxy String)      (Proxy :: Proxy String)
-  iso    (Proxy :: Proxy String)      (Proxy :: Proxy Text)
-  iso    (Proxy :: Proxy Text)        (Proxy :: Proxy LText)
-  iso    (Proxy :: Proxy Text)        (Proxy :: Proxy String)
-  iso    (Proxy :: Proxy Text)        (Proxy :: Proxy Text)
-  iso    (Proxy :: Proxy [Word8])     (Proxy :: Proxy ByteString)
-  iso    (Proxy :: Proxy [Word8])     (Proxy :: Proxy LByteString)
-  iso    (Proxy :: Proxy [Word8])     (Proxy :: Proxy ShortByteString)
-  iso    (Proxy :: Proxy [Word8])     (Proxy :: Proxy [Word8])
+  encode (Proxy :: Proxy LText)           (Proxy :: Proxy ByteString)
+  encode (Proxy :: Proxy LText)           (Proxy :: Proxy LByteString)
+  encode (Proxy :: Proxy LText)           (Proxy :: Proxy ShortByteString)
+  encode (Proxy :: Proxy LText)           (Proxy :: Proxy [Word8])
+  encode (Proxy :: Proxy String)          (Proxy :: Proxy ByteString)
+  encode (Proxy :: Proxy String)          (Proxy :: Proxy LByteString)
+  encode (Proxy :: Proxy String)          (Proxy :: Proxy ShortByteString)
+  encode (Proxy :: Proxy String)          (Proxy :: Proxy [Word8])
+  encode (Proxy :: Proxy Text)            (Proxy :: Proxy ByteString)
+  encode (Proxy :: Proxy Text)            (Proxy :: Proxy LByteString)
+  encode (Proxy :: Proxy Text)            (Proxy :: Proxy ShortByteString)
+  encode (Proxy :: Proxy Text)            (Proxy :: Proxy [Word8])
+  iso    (Proxy :: Proxy ByteString)      (Proxy :: Proxy ByteString)
+  iso    (Proxy :: Proxy ByteString)      (Proxy :: Proxy LByteString)
+  iso    (Proxy :: Proxy ByteString)      (Proxy :: Proxy ShortByteString)
+  iso    (Proxy :: Proxy ByteString)      (Proxy :: Proxy [Word8])
+  iso    (Proxy :: Proxy ShortByteString) (Proxy :: Proxy ByteString)
+  iso    (Proxy :: Proxy ShortByteString) (Proxy :: Proxy LByteString)
+  iso    (Proxy :: Proxy ShortByteString) (Proxy :: Proxy ShortByteString)
+  iso    (Proxy :: Proxy ShortByteString) (Proxy :: Proxy [Word8])
+  iso    (Proxy :: Proxy LByteString)     (Proxy :: Proxy ByteString)
+  iso    (Proxy :: Proxy LByteString)     (Proxy :: Proxy LByteString)
+  iso    (Proxy :: Proxy LByteString)     (Proxy :: Proxy ShortByteString)
+  iso    (Proxy :: Proxy LByteString)     (Proxy :: Proxy [Word8])
+  iso    (Proxy :: Proxy LText)           (Proxy :: Proxy LText)
+  iso    (Proxy :: Proxy LText)           (Proxy :: Proxy String)
+  iso    (Proxy :: Proxy LText)           (Proxy :: Proxy Text)
+  iso    (Proxy :: Proxy String)          (Proxy :: Proxy LText)
+  iso    (Proxy :: Proxy String)          (Proxy :: Proxy String)
+  iso    (Proxy :: Proxy String)          (Proxy :: Proxy Text)
+  iso    (Proxy :: Proxy Text)            (Proxy :: Proxy LText)
+  iso    (Proxy :: Proxy Text)            (Proxy :: Proxy String)
+  iso    (Proxy :: Proxy Text)            (Proxy :: Proxy Text)
+  iso    (Proxy :: Proxy [Word8])         (Proxy :: Proxy ByteString)
+  iso    (Proxy :: Proxy [Word8])         (Proxy :: Proxy LByteString)
+  iso    (Proxy :: Proxy [Word8])         (Proxy :: Proxy ShortByteString)
+  iso    (Proxy :: Proxy [Word8])         (Proxy :: Proxy [Word8])
 
-iso :: forall a b proxy. (Eq a, Show a, Arbitrary a, ConvertString a b, ConvertString b a) => proxy a -> proxy b -> IO ()
-iso _ _ = quickCheck $ \(a :: a) -> convertString (convertString a :: b) == a
+iso :: forall a b proxy. (Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b, ConvertString a b, ConvertString b a) => proxy a -> proxy b -> IO ()
+iso _ _ = do
+  quickCheck $ \(a :: a) -> convertString (convertString a :: b) == a
+  quickCheck $ \(b :: b) -> convertString (convertString b :: a) == b
 
 encode :: forall a b proxy. (Eq a, Show a, Arbitrary a, EncodeString a b) => proxy a -> proxy b -> IO ()
 encode _ _ = do
