diff --git a/changelog.md b/changelog.md
deleted file mode 100644
--- a/changelog.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# Unreleased
-
-# 0.2.0.0
-
-* Add safe, `Maybe` returning, versions of the methods of `Integral`.
-* Hide constructors of effect GADTs.
-* Reexport `Data.Text.Lazy.Builder`.
diff --git a/incipit-base.cabal b/incipit-base.cabal
--- a/incipit-base.cabal
+++ b/incipit-base.cabal
@@ -5,33 +5,30 @@
 -- see: https://github.com/sol/hpack
 
 name:           incipit-base
-version:        0.2.0.0
+version:        0.3.0.0
 synopsis:       A Prelude for Polysemy – Base Reexports
-description:    See <https://hackage.haskell.org/package/incipit-base/docs/Incipit-Prelude.html>
+description:    See https://hackage.haskell.org/package/incipit-base/docs/IncipitBase.html
 category:       Prelude
-homepage:       https://github.com/tek/incipit#readme
-bug-reports:    https://github.com/tek/incipit/issues
+homepage:       https://github.com/tek/incipit-core#readme
+bug-reports:    https://github.com/tek/incipit-core/issues
 author:         Torsten Schmits
-maintainer:     haskell@tryp.io
+maintainer:     hackage@tryp.io
 copyright:      2022 Torsten Schmits
 license:        BSD-2-Clause-Patent
 license-file:   LICENSE
 build-type:     Simple
-extra-source-files:
-    readme.md
-    changelog.md
 
 source-repository head
   type: git
-  location: https://github.com/tek/incipit
+  location: https://github.com/tek/incipit-core
 
 library
   exposed-modules:
-      Incipit
       Incipit.Base
       Incipit.Debug
       Incipit.Either
       Incipit.Fixed
+      Incipit.Fractional
       Incipit.Integral
       Incipit.Libraries
       Incipit.List
@@ -39,7 +36,7 @@
       Incipit.String
       Incipit.String.Conversion
       Incipit.String.Reexport
-      Prelude
+      IncipitBase
   reexported-modules:
       Control.Concurrent.STM
     , Control.Concurrent.STM.TArray
@@ -84,6 +81,7 @@
       DeriveFoldable
       DeriveFunctor
       DeriveGeneric
+      DeriveLift
       DeriveTraversable
       DerivingStrategies
       DerivingVia
@@ -104,7 +102,6 @@
       MultiParamTypeClasses
       MultiWayIf
       NamedFieldPuns
-      NoImplicitPrelude
       OverloadedStrings
       OverloadedLists
       PackageImports
@@ -117,6 +114,7 @@
       RankNTypes
       RecordWildCards
       RecursiveDo
+      RoleAnnotations
       ScopedTypeVariables
       StandaloneDeriving
       TemplateHaskell
@@ -129,7 +127,8 @@
       UndecidableInstances
       UnicodeSyntax
       ViewPatterns
-  ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities
+      NoImplicitPrelude
+  ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wmissing-deriving-strategies -Widentities -Wunused-packages
   build-depends:
       base >=4.13 && <4.17
     , bytestring
@@ -137,6 +136,4 @@
     , data-default >=0.2
     , stm
     , text
-  if impl(ghc >= 8.10)
-    ghc-options: -Wunused-packages
   default-language: Haskell2010
diff --git a/lib/Incipit.hs b/lib/Incipit.hs
deleted file mode 100644
--- a/lib/Incipit.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-{-# options_haddock prune #-}
-
--- |This module is intended to be used by the packages [incipit-core](https://hackage.haskell.org/package/incipit-core)
--- and [incipit](https://hackage.haskell.org/package/incipit), which are Preludes for packages using
--- [Polysemy](https://hackage.haskell.org/package/polysemy).
---
--- Aside from a few additional names from @base@, this module also exports the string system from
--- [relude](https://hackage.haskell.org/package/relude), some tracing functions, and a small set of other combinators.
-module Incipit (
-  module Incipit.Base,
-  module Incipit.Debug,
-  module Incipit.Either,
-  module Incipit.Libraries,
-  module Incipit.List,
-  module Incipit.Misc,
-  module Incipit.String,
-) where
-
-import Incipit.Base
-import Incipit.Debug
-import Incipit.Either
-import Incipit.Libraries
-import Incipit.List
-import Incipit.Misc
-import Incipit.String
diff --git a/lib/Incipit/Base.hs b/lib/Incipit/Base.hs
--- a/lib/Incipit/Base.hs
+++ b/lib/Incipit/Base.hs
@@ -47,6 +47,7 @@
   module GHC.Stack,
   module GHC.TypeLits,
   module Incipit.Fixed,
+  module Incipit.Fractional,
   module Incipit.Integral,
   module Numeric.Natural,
   module System.IO,
@@ -183,7 +184,7 @@
 import GHC.Num (Integer, Num (..), subtract)
 import GHC.OverloadedLabels (IsLabel (..))
 import GHC.Real (
-  Fractional (..),
+  Fractional (fromRational),
   Integral (toInteger),
   Ratio,
   Rational,
@@ -201,10 +202,11 @@
   (^^),
   )
 import GHC.Show (Show)
-import GHC.Stack (HasCallStack)
+import GHC.Stack (HasCallStack, withFrozenCallStack)
 import GHC.TypeLits hiding (ErrorMessage (Text))
 import Numeric.Natural (Natural)
 import System.IO (FilePath, IO, print, putStr, putStrLn)
 
 import Incipit.Fixed
-import Incipit.Integral
+import Incipit.Fractional
+import Incipit.Integral hiding (safeOp)
diff --git a/lib/Incipit/Debug.hs b/lib/Incipit/Debug.hs
--- a/lib/Incipit/Debug.hs
+++ b/lib/Incipit/Debug.hs
@@ -59,6 +59,7 @@
 
 -- |Print a value with a 'Show' instance in an arbitrary 'Monad'.
 dbgs ::
+  ∀ a m .
   HasCallStack =>
   Monad m =>
   Show a =>
@@ -70,6 +71,7 @@
 
 -- |Print a value with a 'Show' instance in an arbitrary 'Monad', returning the value.
 dbgs_ ::
+  ∀ a m .
   HasCallStack =>
   Monad m =>
   Show a =>
@@ -89,23 +91,24 @@
   unsafePerformIO (a <$ debugPrint (srcLoc callStack) msg)
 {-# noinline tr #-}
 
--- |Like 'Debug.Trace.traceShowId', but with 'Text' and with source location prefix.
+-- |Like 'Debug.Trace.traceShow', but with source location prefix.
 trs ::
-  Show a =>
+  ∀ b a .
+  Show b =>
   HasCallStack =>
+  b ->
   a ->
   a
-trs a =
-  unsafePerformIO (a <$ debugPrint (srcLoc callStack) (show a))
+trs b a =
+  unsafePerformIO (a <$ debugPrint (srcLoc callStack) (show b))
 {-# noinline trs #-}
 
--- |Like 'Debug.Trace.traceShow', but with 'Text' and with source location prefix.
-trs' ::
-  Show b =>
+-- |Like 'Debug.Trace.traceShowId', but with source location prefix.
+trsi ::
+  Show a =>
   HasCallStack =>
-  b ->
   a ->
   a
-trs' b a =
-  unsafePerformIO (a <$ debugPrint (srcLoc callStack) (show b))
-{-# noinline trs' #-}
+trsi a =
+  unsafePerformIO (a <$ debugPrint (srcLoc callStack) (show a))
+{-# noinline trsi #-}
diff --git a/lib/Incipit/Either.hs b/lib/Incipit/Either.hs
--- a/lib/Incipit/Either.hs
+++ b/lib/Incipit/Either.hs
@@ -28,3 +28,14 @@
 unify =
   either id id
 {-# inline unify #-}
+
+-- |Run an applicative action on the 'Left' side of an 'Either' to unify the types.
+leftA ::
+  Applicative m =>
+  (a -> m b) ->
+  Either a b ->
+  m b
+leftA f = \case
+  Right b -> pure b
+  Left a -> f a
+{-# inline leftA #-}
diff --git a/lib/Incipit/Fixed.hs b/lib/Incipit/Fixed.hs
--- a/lib/Incipit/Fixed.hs
+++ b/lib/Incipit/Fixed.hs
@@ -1,3 +1,4 @@
+-- |Safe overrides of the "Data.Fixed" division functions.
 module Incipit.Fixed where
 
 import qualified Data.Fixed as Fixed
@@ -6,7 +7,7 @@
 
 import Incipit.Integral (safeOp)
 
--- | Generalisation of 'div' to any instance of 'Real'
+-- | Generalisation of 'GHC.Real.div' to any instance of 'Real'
 div' ::
   Real a =>
   Integral b =>
@@ -16,7 +17,7 @@
 div' =
   safeOp Fixed.div'
 
--- | Generalisation of 'divMod' to any instance of 'Real'
+-- | Generalisation of 'GHC.Real.divMod' to any instance of 'Real'
 divMod' ::
   Real a =>
   Integral b =>
@@ -26,7 +27,7 @@
 divMod' =
   safeOp Fixed.divMod'
 
--- | Generalisation of 'mod' to any instance of 'Real'
+-- | Generalisation of 'GHC.Real.mod' to any instance of 'Real'
 mod' ::
   Real a =>
   a ->
diff --git a/lib/Incipit/Fractional.hs b/lib/Incipit/Fractional.hs
new file mode 100644
--- /dev/null
+++ b/lib/Incipit/Fractional.hs
@@ -0,0 +1,31 @@
+-- |Safe overrides of the methods of class 'Fractional'.
+module Incipit.Fractional where
+
+import Data.Eq (Eq)
+import Data.Maybe (Maybe (Just, Nothing))
+import qualified GHC.Real as Real
+import GHC.Real (Fractional)
+
+import Incipit.Integral (safeOp)
+
+-- | Fractional division.
+(/) ::
+  Eq a =>
+  Fractional a =>
+  a ->
+  a ->
+  Maybe a
+(/) =
+  safeOp (Real./)
+
+-- | Reciprocal fraction.
+recip ::
+  Eq a =>
+  Fractional a =>
+  a ->
+  Maybe a
+recip = \case
+  0 ->
+    Nothing
+  a ->
+    Just (Real.recip a)
diff --git a/lib/Incipit/Integral.hs b/lib/Incipit/Integral.hs
--- a/lib/Incipit/Integral.hs
+++ b/lib/Incipit/Integral.hs
@@ -1,11 +1,16 @@
+-- |Safe overrides of the methods of class 'Integral'.
 module Incipit.Integral where
 
+import Data.Eq (Eq)
 import Data.Maybe (Maybe (Just, Nothing))
+import GHC.Num (Num)
 import qualified GHC.Real as Real
-import GHC.Real (Integral, Real)
+import GHC.Real (Integral)
 
+-- |Helper for operations that return 'Nothing' if the second operand is @0@.
 safeOp ::
-  Real a =>
+  Eq a =>
+  Num a =>
   (a -> a -> b) ->
   a ->
   a ->
diff --git a/lib/Incipit/String.hs b/lib/Incipit/String.hs
--- a/lib/Incipit/String.hs
+++ b/lib/Incipit/String.hs
@@ -37,13 +37,16 @@
 
 -}
 
-module Incipit.String
-    ( module Incipit.String.Reexport
-      -- $reexport
-    , module Incipit.String.Conversion
-      -- $conversion
-    ) where
+module Incipit.String (
+  module Incipit.String,
+  module Incipit.String.Reexport,
+  -- $reexport
+  module Incipit.String.Conversion
+  -- $conversion
+) where
 
+import Data.Function ((.))
+
 import Incipit.String.Conversion
 import Incipit.String.Reexport
 
@@ -55,3 +58,13 @@
 Conversion functions between 'Text', 'String', 'ByteString'.
 Also some read|show helper functions.
 -}
+
+-- |Analog to 'fromString' for 'Text'.
+-- Converts a 'Text' to any @a@ that is an instance of 'IsString'.
+fromText ::
+  IsString a =>
+  Text ->
+  a
+fromText =
+  fromString . toString
+{-# inline fromText #-}
diff --git a/lib/IncipitBase.hs b/lib/IncipitBase.hs
new file mode 100644
--- /dev/null
+++ b/lib/IncipitBase.hs
@@ -0,0 +1,25 @@
+{-# options_haddock prune #-}
+
+-- |This module is intended to be used by the packages [incipit-core](https://hackage.haskell.org/package/incipit-core)
+-- and [incipit](https://hackage.haskell.org/package/incipit), which are Preludes for packages using
+-- [Polysemy](https://hackage.haskell.org/package/polysemy).
+--
+-- Aside from a few additional names from @base@, this module also exports the string system from
+-- [relude](https://hackage.haskell.org/package/relude), some tracing functions, and a small set of other combinators.
+module IncipitBase (
+  module Incipit.Base,
+  module Incipit.Debug,
+  module Incipit.Either,
+  module Incipit.Libraries,
+  module Incipit.List,
+  module Incipit.Misc,
+  module Incipit.String,
+) where
+
+import Incipit.Base
+import Incipit.Debug
+import Incipit.Either
+import Incipit.Libraries
+import Incipit.List
+import Incipit.Misc
+import Incipit.String
diff --git a/lib/Prelude.hs b/lib/Prelude.hs
deleted file mode 100644
--- a/lib/Prelude.hs
+++ /dev/null
@@ -1,6 +0,0 @@
--- |Exposing this module makes it possible to depend on the package without a mixin.
-module Prelude (
-  module Incipit
-) where
-
-import Incipit
diff --git a/readme.md b/readme.md
deleted file mode 100644
--- a/readme.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# About
-
-This library is part of [incipit], a set of `Prelude` modules for the [Polysemy] ecosystem.
-It contains the reexports from `base` that are inherited by the other two packages.
-
-# Usage
-
-`incipit-base` exports `Prelude`, so in order to use it you only have to hide `Prelude` from `base`:
-
-For `hpack`:
-```yaml
-dependencies:
-  - name: base
-    version: '>= 4 && < 5'
-    mixin:
-      - hiding (Prelude)
-  - incipit-base >= 0.1.0.3
-```
-
-For `cabal`:
-```cabal
-build-depends:
-    base >=4 && <5, incipit-base >= 0.1.0.3
-mixins:
-    base hiding (Prelude)
-```
-
-[incipit]: https://hackage.haskell.org/package/incipit
-[Polysemy]: https://hackage.haskell.org/package/polysemy
