diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.2.0 (2024-05-01)
+* add missing `Show` instance to `RefineFailure`
+* add missing `Functor` instance to `Refined1`
+* general cleanup
+
 ## 0.1.0 (2024-04-30)
 Initial release.
 
diff --git a/rerefined.cabal b/rerefined.cabal
--- a/rerefined.cabal
+++ b/rerefined.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           rerefined
-version:        0.1.0
+version:        0.2.0
 synopsis:       Refinement types, again
 description:    Please see README.md.
 category:       Types, Data
@@ -26,6 +26,7 @@
 
 library
   exposed-modules:
+      Rerefined
       Rerefined.Predicate
       Rerefined.Predicate.Common
       Rerefined.Predicate.Fail
diff --git a/src/Rerefined.hs b/src/Rerefined.hs
new file mode 100644
--- /dev/null
+++ b/src/Rerefined.hs
@@ -0,0 +1,7 @@
+module Rerefined
+  ( module Rerefined.Refine
+  , Predicate, Refine, Refine1
+  ) where
+
+import Rerefined.Refine
+import Rerefined.Predicate
diff --git a/src/Rerefined/Predicate.hs b/src/Rerefined/Predicate.hs
--- a/src/Rerefined/Predicate.hs
+++ b/src/Rerefined/Predicate.hs
@@ -60,4 +60,4 @@
   -- ^ Any wrapped errors, for combinator predicates.
   --
   -- What these are, and their order, should be noted in 'refineFailureDetail'.
-  }
+  } deriving stock Show
diff --git a/src/Rerefined/Refine.hs b/src/Rerefined/Refine.hs
--- a/src/Rerefined/Refine.hs
+++ b/src/Rerefined/Refine.hs
@@ -1,6 +1,21 @@
-{-# LANGUAGE OverloadedStrings, AllowAmbiguousTypes #-}
+{-# LANGUAGE OverloadedStrings #-}
 
-module Rerefined.Refine where
+module Rerefined.Refine
+  (
+  -- * @Refined@
+    type Refined
+  , refine
+  , unrefine
+
+  -- * @Refined1@
+  , type Refined1
+  , refine1
+  , unrefine1
+
+  -- * Errors
+  , type RefineFailure
+  , prettyRefineFailure
+  ) where
 
 import Rerefined.Refined
 import Rerefined.Refined1
diff --git a/src/Rerefined/Refine/TH.hs b/src/Rerefined/Refine/TH.hs
--- a/src/Rerefined/Refine/TH.hs
+++ b/src/Rerefined/Refine/TH.hs
@@ -5,8 +5,6 @@
 
 import Rerefined.Refine
 import Rerefined.Predicate
-import Rerefined.Refined
-import Rerefined.Refined1
 import Language.Haskell.TH.Syntax qualified as TH
 
 -- | Refine @a@ with predicate @p@ at compile time via Template Haskell.
diff --git a/src/Rerefined/Refine/Unsafe.hs b/src/Rerefined/Refine/Unsafe.hs
--- a/src/Rerefined/Refine/Unsafe.hs
+++ b/src/Rerefined/Refine/Unsafe.hs
@@ -9,8 +9,19 @@
 why the usage is safe.
 -}
 
-module Rerefined.Refine.Unsafe where
+module Rerefined.Refine.Unsafe
+  (
+  -- * @Refined@
+    type Refined
+  , unsafeRefine
+  , unsafeRerefine
 
+  -- * @Refined1@
+  , type Refined1
+  , unsafeRefine1
+  , unsafeRerefine1
+  ) where
+
 import Rerefined.Refined
 import Rerefined.Refined1
 
@@ -20,14 +31,21 @@
 unsafeRefine :: a -> Refined p a
 unsafeRefine = Refined
 
+-- | Replace a 'Refined''s predicate without validating the new prdicate @pNew@.
+--
+-- Unsafe. Use only when you can manually prove that the new predicate holds.
+unsafeRerefine :: forall pNew pOld a. Refined pOld a -> Refined pNew a
+unsafeRerefine = Refined . unrefine
+
 -- | Construct a 'Refined1' without validating the predicate @p@.
 --
 -- Unsafe. Use only when you can manually prove that the predicate holds.
 unsafeRefine1 :: f a -> Refined1 p f a
 unsafeRefine1 = Refined1
 
--- | Replace a 'Refined''s predicate without validating the new prdicate @pNew@.
+-- | Replace a 'Refined1''s predicate without validating the new prdicate
+--   @pNew@.
 --
 -- Unsafe. Use only when you can manually prove that the new predicate holds.
-unsafeRerefine :: forall pNew pOld a. Refined pOld a -> Refined pNew a
-unsafeRerefine = Refined . unrefine
+unsafeRerefine1 :: forall pNew pOld f a. Refined1 pOld f a -> Refined1 pNew f a
+unsafeRerefine1 = Refined1 . unrefine1
diff --git a/src/Rerefined/Refined.hs b/src/Rerefined/Refined.hs
--- a/src/Rerefined/Refined.hs
+++ b/src/Rerefined/Refined.hs
@@ -1,3 +1,8 @@
+-- | 'Refined' definition.
+--
+-- Not intended for external use. For unsafe refines, use
+-- 'Rerefined.Refine.Unsafe'.
+
 module Rerefined.Refined where
 
 import Language.Haskell.TH.Syntax ( Lift )
diff --git a/src/Rerefined/Refined1.hs b/src/Rerefined/Refined1.hs
--- a/src/Rerefined/Refined1.hs
+++ b/src/Rerefined/Refined1.hs
@@ -1,10 +1,15 @@
+-- | 'Refined1' definition.
+--
+-- Not intended for external use. For unsafe refines, use
+-- 'Rerefined.Refine.Unsafe'.
+
 module Rerefined.Refined1 where
 
 import Language.Haskell.TH.Syntax ( Lift )
 
 -- | @f a@ refined with predicate @p@.
 newtype Refined1 p f a = Refined1 (f a)
-    deriving stock (Lift, Show) -- TODO Show? useful but meh?
+    deriving stock (Functor, Lift, Show) -- TODO Show? useful but meh?
 
 -- | Strip the refinement from a 'Refined1'.
 --
