diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
--- a/.travis.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-sudo: false
-language: generic
-
-cache:
-  directories:
-  - $HOME/.stack
-  - $TRAVIS_BUILD_DIR/.stack-work/install
-
-addons:
-  apt:
-    packages:
-      - libgmp-dev
-
-before_install:
-  - mkdir -p ~/.local/bin
-  - export PATH=$HOME/.local/bin:$PATH
-  - travis_retry curl -L https://get.haskellstack.org/stable/linux-x86_64.tar.gz | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack'
-
-install:
-  - stack --no-terminal setup
-  - stack --no-terminal build --fast --only-dependencies
-
-script:
-  - stack --no-terminal build --fast --bench --no-run-benchmarks
-  - curl -sL https://raw.github.com/ndmitchell/weeder/master/misc/travis.sh | sh -s .
diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,89 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/)
 and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/).
 
+## [0.1.0] - 2018-10-21
+
+### Added
+- Add `Diff` dependency
+- Add `Safe` dependency
+- Add `compactable` dependency
+- Add `email-validate` dependency
+- Add `exact-pi` dependency
+- Add `fast-digits` dependency
+- Add `generic-lens` dependency
+- Add `ilist` dependency
+- Add `insert-ordered-containers` dependency
+- Add `neat-interpolation` dependency
+- Add `random-bytestring` dependency
+- Add `say` dependency
+- Add `stringsearch` dependency
+- Add `text-metrics` dependency
+- Add `Posix.Signal` module
+- Add `ByteString.Lazy.Builder` module
+- Export `Concurrency.TBQueue.lengthTBQueue` if `stm >= 2.5.0`
+- Export `Concurrency.TVar.stateTVar` if `stm >= 2.5.0`
+- Export `Foldable.any`
+- Export `(Numeric.Fractional.^^)`
+- Export `(Numeric.Num.^)`
+- Export `(Optic.Fold.Unsafe.^?!)`
+- Export `(Bits..|.~)`, `(Bits..&.~)`, `Bits.bitAt`, `Bits.bits`
+- Export `Mitchell.Prelude.Contravariant`
+- Export `Mitchell.Prelude.any`
+- Export `Mitchell.Prelude.contramap`
+- Export `File.Binary.hPutSerialise`
+- Export `Function.curry3`
+- Export `Function.uncurry3`
+- Export `IO.Memoized`
+- Export `IO.runMemoized`
+- Export `IO.memoizeMVar`
+- Export `Num.Nat.plusMinusInverse1`
+- Export `Num.Nat.plusMinusInverse2`
+- Export `Num.Nat.plusMinusInverse3`
+- Export `Parallelism.parEval`
+- Export `Mitchell.Prelude.Prism'`
+- Export `Mitchell.Prelude.Traversal'`
+- Export `Mitchell.Prelude.the`
+- Export `Mitchell.Prelude._As`
+
+### Changed
+- Swap `Unique` implementation from `base` to `unique`
+- Swap `ByteString.split` from `bytestring` for `ByteString.split` from `stringsearch`
+- Swap old text printing functions for `say` versions in `Mitchell.Prelude`
+- Rename `Posix` to `Lang.C`
+- Rename `Posix.Signal` to `Signal`
+- Shorten `Numeric.*` to `Num.*`
+- Move `Bifoldable(.Partial)` modules info `Foldable(.Partial)` modules
+- Move `Bifunctor` module info `Functor` module
+- Move `Bitraversable` module info `Traversable` module
+- Move `Tuple.(un)curry` to `Function.(un)curry`
+- Move `Optic.Iso.*` into `Optic.Iso`
+- Move `Optic.Lens.*` into `Optic.Lens`
+- Move `Optic.Prism.*` into `Optic.Prism`
+- Move `Optic.Traversal.*` into `Optic.Traversal`
+
+### Removed
+- Remove `envparse` dependency
+- Remove `Distributive.fmapCollect` function
+- Remove `ByteString.append` function
+- Remove `ByteString.cons` function
+- Remove `ByteString.empty` function
+- Remove `bitDefault`, `popCountDefault`, `testBitDefault` from `Bits`
+- Remove `File.Text.hPrint` function
+- Remove `File.Text.print` function
+- Remove `Mitchell.Prelude.Index` type family
+- Remove `Mitchell.Prelude.IxValue` type family
+- Remove `Mitchell.Prelude.Ixed` type class
+- Remove `Mitchell.Prelude.ix` function
+- Split off separate `mitchell-prelude-test` package
+  - Remove `gauge` dependency
+  - Remove `hedgehog` dependency
+  - Remove `weigh` dependency
+  - Remove `Bench` module
+  - Remove `Test` module
+  - Remove `Test.Gen` module
+  - Remove `Test.Range` module
+  - Remove `Weigh` module
+
 ## [0.0.0] - 2018-09-20
 
 ### Added
diff --git a/README.md b/README.md
deleted file mode 100644
--- a/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-### Summary
-
-`planet-mitchell` is my very own Haskell package planet.
-
-It contains no new code, only re-exports from `base` and various well-known
-packages, similar to [https://hackage.haskell.org/package/rebase](rebase).
-
-- `Control.`, `Data.`, `Foreign.`, etc. module prefixes are stripped. The idea
-  here is that, if a name such as `Applicative` is sufficiently unambiguous in
-  the Haskell ecosystem, it deserves as short a module name as possible.
-
-  See the [elm standard library](http://package.elm-lang.org/packages/elm-lang/core/latest)
-  for inspiration.
-
-- The module hierarchy is not faithful to the underlying packages. Many modules
-  contain related re-exports from multiple packages, and I've invented a few new
-  sin-bin modules such as `Concurrency`, `Parallelism`, `Eval`, and `Debug`.
-
-- To reduce API surface area and encourage a consistent vocabulary, redundant
-  functions like `sequence` and `mapM` are not re-exported.
-
-- Odd, uncommon, and deprecated types and functions (like `WrappedApplicative`)
-  are not re-exported.
-
-- Partial functions are discouraged and mostly live in `.Partial` modules. (This
-  is a work-in-progress).
-
-- Unsafe functions are discouraged and mostly live in `.Unsafe` modules. (This
-  is a work-in-progress).
-
-- `String` is heavily discouraged, and many `String` IO functions are not
-  re-exported; `Text` and/or `ByteString` versions are re-exported instead.
-
-- Generalizations like `MonadIO` / `MonadUnliftIO` are used where possible.
-
-### Stability
-
-Alpha quality, massive breaking changes should be expected and no changelog will
-be kept for some time. Don't use this package.
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/planet-mitchell.cabal b/planet-mitchell.cabal
--- a/planet-mitchell.cabal
+++ b/planet-mitchell.cabal
@@ -9,21 +9,33 @@
   This package provides a curated, highly unstable collection of reorganized
   re-exports. Mostly for personal use at the moment, me but please poke around
   and see README.md for a bit more information ;)
+  .
+  A note on module names:
+  .
+  /Partial/ means the module contains partial functions that may throw
+  exceptions if preconditions are violated.
+  .
+  /Unsafe/ means the module contains unsafe functions that either:
+  .
+  * assume that preconditions hold, e.g. @unsafeEmailAddress@, which constructs
+    an @EmailAddress@ from a @ByteString@ that is assumed to be valid.
+  .
+  * do other suspicious things like interleave @IO@ with evaluation, as
+    @unsafePerformIO@, or lie to the type checker, as @unsafeCoerce@. In a word,
+    dragons.
 license-file: LICENSE
 license: BSD3
 maintainer: Mitchell Rosen <mitchellwrosen@gmail.com>
 name: planet-mitchell
 synopsis: Planet Mitchell
-tested-with: GHC == 8.4.3
-version: 0.0.0
+tested-with: GHC == 8.4.3, GHC == 8.6.1
+version: 0.1.0
 homepage: https://github.com/mitchellwrosen/planet-mitchell
 bug-reports: https://github.com/mitchellwrosen/planet-mitchell/issues
 copyright: (c) 2018, Mitchell Rosen
 
 extra-source-files:
-  .travis.yml
   CHANGELOG.md
-  README.md
 
 source-repository head
   type: git
@@ -41,104 +53,115 @@
   default-language: Haskell2010
 
   build-depends:
-      aeson ^>= 1.3.1 || ^>= 1.4.0
-    , base ^>= 4.10 || ^>= 4.11
-    , base-orphans ^>= 0.8
-    , aeson-pretty ^>= 0.8.7
-    , aeson-qq ^>= 0.8.2
-    , ansi-terminal ^>= 0.8.0
-    , approximate ^>= 0.3.1
-    , array ^>= 0.5.2
-    , async ^>= 2.2.1
-    , atomic-primops ^>= 0.8
-    , base16-bytestring ^>= 0.1.1
-    , bits ^>= 0.5.0
-    , bytestring ^>= 0.10.8
-    , bytestring-lexing ^>= 0.5.0
-    , case-insensitive ^>= 1.2.0
-    , cborg ^>= 0.2.0
-    , comonad ^>= 5.0
-    , compact ^>= 0.1.0
-    , constraints ^>= 0.10
-    , containers ^>= 0.5.11
-    , contravariant ^>= 1.4.1
-    , contravariant-extras ^>= 0.3.4
-    , deepseq ^>= 1.4.3
-    , distributive ^>= 0.5.3
-    , dlist ^>= 0.8.0
-    , double-conversion ^>= 2.0.2.0
-    , Earley ^>= 0.12.0
-    , envparse ^>= 0.4
-    , erf ^>= 2.0.0
-    , exceptions ^>= 0.10.0
-    , extra ^>= 1.6.9 || ^>= 1.6.10 || ^>= 1.6.11
-    , fgl ^>= 5.6.0
-    , filepath ^>= 1.4.2
-    , foldl ^>= 1.4.0
-    , free ^>= 5.1
-    , gauge ^>= 0.2.1
-    , generic-aeson ^>= 0.2.0.9
-    , half ^>= 0.3
-    , hashable ^>= 1.2.7
-    , heaps ^>= 0.3.0
-    , hedgehog ^>= 0.5.3 || ^>= 0.6
-    , integer-logarithms ^>= 1.0.2
-    , lens ^>= 4.16.1
-    , lens-aeson ^>= 1.0.2
-    , list-transformer ^>= 1.0.4
-    , logict ^>= 0.6.0
-    , managed ^>= 1.0.6
-    , megaparsec ^>= 6.5.0
-    , mmorph ^>= 1.1.2
-    , monad-ste ^>= 0.1.0
-    , mtl ^>= 2.2.2
-    , multiset ^>= 0.3.4
-    , mwc-random ^>= 0.13.6
-    , network ^>= 2.7.0
-    , network-info ^>= 0.2.0
-    , network-uri ^>= 2.6.1
-    , nf ^>= 1.0.1
-    , optparse-applicative ^>= 0.14.2
-    , parallel ^>= 3.2.1
-    , parser-combinators ^>= 1.0.0
-    , pointed ^>= 5.0.1
-    , prettyprinter ^>= 1.2.0
-    , prettyprinter-ansi-terminal ^>= 1.1.1
-    , primitive ^>= 0.6.4
-    , profunctors ^>= 5.2 || ^>= 5.3
-    , psqueues ^>= 0.2.7
-    , reactive-banana ^>= 1.2.0
-    , reflection ^>= 2.1
-    , regex-applicative ^>= 0.3.3
-    , scientific ^>= 0.3.6
-    , semigroupoids ^>= 5.3.1
-    , semigroups ^>= 0.18.4
-    , semilattices ^>= 0.0.0
-    , serialise ^>= 0.2.0
-    , split ^>= 0.2.3.3
-    , stm ^>= 2.4.5
-    , stm-chans ^>= 3.0.0
-    , stm-containers ^>= 0.2.16
-    , tagged ^>= 0.8.5
-    , text ^>= 1.2.3
-    , text-short ^>= 0.1.2
-    , time ^>= 1.8 || ^>= 1.9.1
-    , transformers ^>= 0.5.5
-    , transformers-base ^>= 0.4.5
-    , transformers-compat ^>= 0.6.2
-    , typed-process ^>= 0.2.2
-    , unagi-chan ^>= 0.4.1
-    , unix ^>= 2.7.2
-    , unliftio ^>= 0.2.7.0
-    , unordered-containers ^>= 0.2.9
-    , utf8-string ^>= 1.0.1.1
-    , uuid ^>= 1.3.13
-    , uuid-types ^>= 1.0.3
-    , vault ^>= 0.3.1
-    , vector ^>= 0.12.0
-    , vector-builder ^>= 0.3.6
-    , weigh ^>= 0.0.12
-    , writer-cps-mtl ^>= 0.1.1
+      aeson                       >= 1.3.1   && < 1.4.2
+    , base                        >= 4.10    && < 4.12.1
+    , base-orphans                >= 0.8     && < 0.8.1
+    , aeson-pretty                >= 0.8.7   && < 0.8.8
+    , aeson-qq                    >= 0.8.2   && < 0.8.3
+    , ansi-terminal               >= 0.8.0   && < 0.8.2
+    , approximate                 >= 0.3.1   && < 0.3.2
+    , array                       >= 0.5.2   && < 0.5.3
+    , async                       >= 2.2.1   && < 2.2.2
+    , atomic-primops              >= 0.8     && < 0.8.3
+    , base16-bytestring           >= 0.1.1   && < 0.1.2
+    , bits                        >= 0.5.1   && < 0.5.2
+    , bytestring                  >= 0.10.8  && < 0.10.9
+    , bytestring-lexing           >= 0.5.0   && < 0.5.1
+    , case-insensitive            >= 1.2.0   && < 1.2.1
+    , cborg                       >= 0.2.0   && < 0.2.2
+    , comonad                     >= 5.0     && < 5.0.5
+    , compact                     >= 0.1.0   && < 0.1.1
+    , compactable                 >= 0.1.2   && < 0.1.3
+    , constraints                 >= 0.10.1  && < 0.10.2
+    , containers                  >= 0.5.11  && < 0.5.12
+    , contravariant               >= 1.4.1   && < 1.5.1
+    , contravariant-extras        >= 0.3.4   && < 0.3.5
+    , deepseq                     >= 1.4.3   && < 1.4.5
+    , Diff                        >= 0.3.4   && < 0.3.5
+    , distributive                >= 0.5.3   && < 0.6.1
+    , dlist                       >= 0.8.0   && < 0.8.1
+    , double-conversion           >= 2.0.2.0 && < 2.0.3
+    , Earley                      >= 0.12.0  && < 0.12.2
+    , email-validate              >= 2.3.2   && < 2.3.3
+    , erf                         >= 2.0.0   && < 2.0.1
+    , exact-pi                    >= 0.4.1   && < 0.4.2
+    , exceptions                  >= 0.10.0  && < 0.10.1
+    , extra                       >= 1.6.12  && < 1.6.14
+    , fast-digits                 >= 0.2.1   && < 0.2.2
+    , fgl                         >= 5.6.0   && < 5.6.1
+    , filepath                    >= 1.4.2   && < 1.4.3
+    , foldl                       >= 1.4.0   && < 1.4.1
+    , free                        >= 5.1     && < 5.1.1
+    , generic-aeson               >= 0.2.0.9 && < 0.2.1
+    , generic-lens                >= 1.0.0   && < 1.0.1
+    , half                        >= 0.3     && < 0.3.1
+    , hashable                    >= 1.2.7   && < 1.2.8
+    , heaps                       >= 0.3.0   && < 0.3.7
+    , ilist                       >= 0.3.1   && < 0.3.2
+    , insert-ordered-containers   >= 0.2.1   && < 0.2.2
+    , integer-logarithms          >= 1.0.2   && < 1.0.3
+    , lens                        >= 4.16.1  && < 4.17.1
+    , lens-aeson                  >= 1.0.2   && < 1.0.3
+    , list-transformer            >= 1.0.4   && < 1.0.5
+    , logict                      >= 0.6.0   && < 0.6.1
+    , managed                     >= 1.0.6   && < 1.0.7
+    , megaparsec                  >= 6.5.0   && < 6.5.1
+    , mmorph                      >= 1.1.2   && < 1.1.3
+    , monad-ste                   >= 0.1.0   && < 0.1.1
+    , mtl                         >= 2.2.2   && < 2.2.3
+    , multiset                    >= 0.3.4   && < 0.3.5
+    , mwc-random                  >= 0.13.6  && < 0.14.1
+    , neat-interpolation          >= 0.3.2   && < 0.3.3
+    , network                     >= 2.7.0   && < 2.8.1
+    , network-info                >= 0.2.0   && < 0.2.1
+    , network-uri                 >= 2.6.1   && < 2.6.2
+    , nf                          >= 1.0.1   && < 1.0.2
+    , optparse-applicative        >= 0.14.2  && < 0.14.4
+    , parallel                    >= 3.2.2.0 && < 3.2.3
+    , parser-combinators          >= 1.0.0   && < 1.0.1
+    , pointed                     >= 5.0.1   && < 5.0.2
+    , prettyprinter               >= 1.2.0   && < 1.2.1
+    , prettyprinter-ansi-terminal >= 1.1.1   && < 1.1.2
+    , primitive                   >= 0.6.4   && < 0.6.5
+    , profunctors                 >= 5.2     && < 5.3.1
+    , psqueues                    >= 0.2.7   && < 0.2.8
+    , random-bytestring           >= 0.1.3   && < 0.1.4
+    , reactive-banana             >= 1.2.0   && < 1.2.1
+    , reflection                  >= 2.1     && < 2.1.5
+    , regex-applicative           >= 0.3.3   && < 0.3.4
+    , safe                        >= 0.3.17  && < 0.3.18
+    , say                         >= 0.1.0   && < 0.1.1
+    , scientific                  >= 0.3.6   && < 0.3.7
+    , semigroupoids               >= 5.3.1   && < 5.3.2
+    , semigroups                  >= 0.18.4  && < 0.18.6
+    , semilattices                >= 0.0.0   && < 0.0.1
+    , serialise                   >= 0.2.0   && < 0.2.1
+    , split                       >= 0.2.3.3 && < 0.2.4
+    , stm                         >= 2.4.5   && < 2.5.1
+    , stm-chans                   >= 3.0.0   && < 3.0.1
+    , stm-containers              >= 0.2.16  && < 0.2.17
+    , stringsearch                >= 0.3.6   && < 0.3.7
+    , tagged                      >= 0.8.6   && < 0.8.7
+    , text                        >= 1.2.3   && < 1.2.4
+    , text-metrics                >= 0.3.0   && < 0.3.1
+    , text-short                  >= 0.1.2   && < 0.1.3
+    , time                        >= 1.8     && < 1.9.2
+    , transformers                >= 0.5.5   && < 0.5.6
+    , transformers-base           >= 0.4.5   && < 0.4.6
+    , transformers-compat         >= 0.6.2   && < 0.6.3
+    , typed-process               >= 0.2.2   && < 0.2.4
+    , unagi-chan                  >= 0.4.1   && < 0.4.2
+    , unique                      >= 0       && < 0.0.1
+    , unix                        >= 2.7.2   && < 2.7.3
+    , unliftio                    >= 0.2.8.0 && < 0.2.9
+    , unordered-containers        >= 0.2.9   && < 0.2.10
+    , utf8-string                 >= 1.0.1.1 && < 1.0.2
+    , uuid                        >= 1.3.13  && < 1.3.14
+    , uuid-types                  >= 1.0.3   && < 1.0.4
+    , vault                       >= 0.3.1   && < 0.3.2
+    , vector                      >= 0.12.0  && < 0.12.1
+    , vector-builder              >= 0.3.6   && < 0.3.7
+    , writer-cps-mtl              >= 0.1.1   && < 0.1.2
 
   exposed-modules:
     Ala.Compose
@@ -149,11 +172,6 @@
     Applicative
     Array
     Array.Partial
-    Benchmark
-    Bifoldable
-    Bifoldable.Partial
-    Bifunctor
-    Bitraversable
     Bits
     Bool
     Bounded
@@ -163,6 +181,7 @@
     ByteString.Latin1.Partial
     ByteString.Lazy
     ByteString.Lazy.Base16
+    ByteString.Lazy.Builder
     ByteString.Lazy.Latin1
     ByteString.Lazy.Utf8
     ByteString.Partial
@@ -177,6 +196,7 @@
     Coerce
     Coerce.Unsafe
     Comonad
+    Compactable
     CompactRegion
     Concurrency
     Concurrency.Chan
@@ -209,6 +229,8 @@
     Divisible
     Dynamic
     Either
+    Email
+    Email.Unsafe
     Enum
     Environment
     Equality
@@ -239,6 +261,7 @@
     Json.Decode
     Json.Encode
     Label
+    Lang.C
     List
     List.Builder
     List.Builder.Partial
@@ -250,6 +273,7 @@
     Managed
     Map
     Map.Hash
+    Map.Hash.Linked
     Map.Int
     Map.Int.Lazy
     Map.Lazy
@@ -267,57 +291,50 @@
     Monoid
     MultiSet
     MultiSet.Int
-    Numeric.Approximate
-    Numeric.Complex
-    Numeric.Double
-    Numeric.Erf
-    Numeric.Fast
-    Numeric.Float
-    Numeric.Floating
-    Numeric.Fractional
-    Numeric.Half
-    Numeric.Int
-    Numeric.Integer
-    Numeric.Integral
-    Numeric.InvErf
-    Numeric.Nat
-    Numeric.Natural
-    Numeric.Num
-    Numeric.Product
-    Numeric.Ratio
-    Numeric.Real
-    Numeric.RealFloat
-    Numeric.RealFrac
-    Numeric.Scientific
-    Numeric.Sum
-    Numeric.Word
+    Num.Approximate
+    Num.Complex
+    Num.Double
+    Num.Erf
+    Num.Fast
+    Num.Float
+    Num.Floating
+    Num.Fractional
+    Num.Half
+    Num.Int
+    Num.Integer
+    Num.Integer.Partial
+    Num.Integral
+    Num.InvErf
+    Num.Nat
+    Num.Natural
+    Num.Natural.Partial
+    Num.Num
+    Num.Pi
+    Num.Product
+    Num.Ratio
+    Num.Real
+    Num.RealFloat
+    Num.RealFrac
+    Num.Scientific
+    Num.Sum
+    Num.Word
     Optic.Fold
+    Optic.Fold.Unsafe
     Optic.Getter
     Optic.Getting
     Optic.Iso
-    Optic.Iso.Reversing
-    Optic.Iso.Strict
     Optic.Lens
-    Optic.Lens.At
-    Optic.Lens.Contains
     Optic.Prism
-    Optic.Prism.Cons
-    Optic.Prism.Empty
-    Optic.Prism.Snoc
     Optic.Review
     Optic.Setter
     Optic.Traversal
-    Optic.Traversal.Each
-    Optic.Traversal.Ixed
     Ord
     Parallelism
     Parser.Binary
     Parser.Cli
     Parser.Earley
-    Parser.Env
     Parser.Text
     Pointed
-    Posix
     Predicate
     Pretty
     Prim
@@ -351,6 +368,7 @@
     Set.Hash
     Set.Int
     Show
+    Signal
     Socket
     StableName
     State
@@ -359,13 +377,11 @@
     System
     Tagged
     Terminal
-    Test
-    Test.Gen
-    Test.Range
     Text
     Text.Lazy
     Text.Lazy.Builder
     Text.Partial
+    Text.QQ
     Text.Short
     Text.Short.Partial
     Text.Short.Unsafe
@@ -389,7 +405,6 @@
     Vector.Storable
     Vector.Unboxed
     Void
-    Weigh
     Writer
 
 -- benchmark semaphore
diff --git a/src/Ala/Identity.hs b/src/Ala/Identity.hs
--- a/src/Ala/Identity.hs
+++ b/src/Ala/Identity.hs
@@ -1,8 +1,10 @@
 module Ala.Identity
-  ( Identity(..)
+  ( -- * Identity
+    Identity(..)
+  , generalize
+    -- * IdentityT
   , IdentityT(..)
   , mapIdentityT
-  , generalize
   ) where
 
 import Control.Monad.Morph          (generalize)
diff --git a/src/Benchmark.hs b/src/Benchmark.hs
deleted file mode 100644
--- a/src/Benchmark.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-module Benchmark
-  ( -- * Running benchmarks
-    defaultMain
-    -- * Constructing benchmarks
-    -- ** Benchmark
-  , Benchmark
-  , bench
-  , bgroup
-  , env
-  , envWithCleanup
-    -- ** Benchmarkable
-  , Benchmarkable
-  , nfIO
-  , whnfIO
-  , nf
-  , whnf
-  , perBatchEnv
-  , perBatchEnvWithCleanup
-  , perRunEnv
-  , perRunEnvWithCleanup
-  ) where
-
-import Gauge
diff --git a/src/Bifoldable.hs b/src/Bifoldable.hs
deleted file mode 100644
--- a/src/Bifoldable.hs
+++ /dev/null
@@ -1,34 +0,0 @@
-module Bifoldable
-  ( -- * Bifoldable
-    Bifoldable(bifold, bifoldMap, bifoldr)
-  , bifoldr'
-  , bifoldrM
-  , bifoldl'
-  , bifoldlM
-  , bitraverse_
-  , bifor_
-  , bisequence_
-  , biasum
-  , biList
-  , binull
-  , bilength
-  , bielem
-  , bisum
-  , biproduct
-  , biconcatMap
-  , biand
-  , bior
-  , biany
-  , biall
-  , binotElem
-  , bifind
-    -- * Bifoldable1
-  , Bifoldable1(..)
-  , bitraverse1_
-  , bifor1_
-  , bisequenceA1_
-  ) where
-
-import Data.Bifoldable
-import Data.Semigroup.Bifoldable (Bifoldable1(bifold1, bifoldMap1), bifor1_,
-                                  bisequenceA1_, bitraverse1_)
diff --git a/src/Bifoldable/Partial.hs b/src/Bifoldable/Partial.hs
deleted file mode 100644
--- a/src/Bifoldable/Partial.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-module Bifoldable.Partial
-  ( bifoldl1
-  , bifoldr1
-  , bimaximum
-  , bimaximumBy
-  , biminimum
-  , biminimumBy
-  ) where
-
-import Data.Bifoldable
diff --git a/src/Bifunctor.hs b/src/Bifunctor.hs
deleted file mode 100644
--- a/src/Bifunctor.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-module Bifunctor
-  ( -- * Bifunctor
-    Bifunctor(..)
-  , Swapped(..)
-    -- * Biapply
-  , Biapply(..)
-  ) where
-
-import Control.Lens.Iso (Swapped(swapped))
-import Data.Bifunctor
-import Data.Bifunctor.Apply (Biapply((<<.>>), (.>>), (<<.)))
diff --git a/src/Bitraversable.hs b/src/Bitraversable.hs
deleted file mode 100644
--- a/src/Bitraversable.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-module Bitraversable
-  ( -- * Bitraversable
-    Bitraversable(..)
-  , bisequence
-  , bifor
-  , bimapAccumL
-  , bimapAccumR
-    -- ** Default @Bifunctor@ implementation
-  , bimapDefault
-    -- ** Default @Bifoldable@ implementation
-  , bifoldMapDefault
-    -- * Bitraversable1
-  , Bitraversable1(..)
-    -- ** Default @Bifoldable1@ implementation
-  , bifoldMap1Default
-  ) where
-
-import Data.Bitraversable           (Bitraversable(bitraverse),
-                                     bifoldMapDefault, bifor, bimapAccumL,
-                                     bimapAccumR, bimapDefault, bisequence)
-import Data.Semigroup.Bitraversable (Bitraversable1(bisequence1, bitraverse1),
-                                     bifoldMap1Default)
diff --git a/src/Bits.hs b/src/Bits.hs
--- a/src/Bits.hs
+++ b/src/Bits.hs
@@ -6,11 +6,13 @@
   , FiniteBits(..)
   , Ranked(..)
   , msb
-    -- * Default @Bits@ implementations
-  , bitDefault
-  , testBitDefault
-  , popCountDefault
+    -- ** Optics
+  , (.|.~)
+  , (.&.~)
+  , bitAt
+  , bits
   ) where
 
-import Data.Bits
-import Data.Bits.Extras
+import Data.Bits        (Bits(..), FiniteBits(..), toIntegralSized)
+import Data.Bits.Extras (Ranked(..), msb, srl)
+import Data.Bits.Lens   (bitAt, bits, (.&.~), (.|.~))
diff --git a/src/Bounded.hs b/src/Bounded.hs
--- a/src/Bounded.hs
+++ b/src/Bounded.hs
@@ -1,13 +1,15 @@
 module Bounded
   ( -- * Bounded
     Bounded(..)
+    -- * Lower
   , Lower(..)
+    -- * Upper
   , Upper(..)
-    -- ** Newtypes
+    -- * Newtypes
   , Bound(..)
   ) where
 
 import Data.Semilattice.Bound
 import Data.Semilattice.Lower
 import Data.Semilattice.Upper
-import GHC.Enum
+import GHC.Enum (Bounded(maxBound, minBound))
diff --git a/src/ByteString.hs b/src/ByteString.hs
--- a/src/ByteString.hs
+++ b/src/ByteString.hs
@@ -4,13 +4,13 @@
   , all
   , any
   , asHexadecimal
-  , append
   , break
+  , breakAfter
   , breakEnd
+  , breakOn
   , breakSubstring
   , concat
   , concatMap
-  , cons
   , copy
   , count
   , drop
@@ -19,7 +19,6 @@
   , elemIndex
   , elemIndexEnd
   , elemIndices
-  , empty
   , filter
   , find
   , findIndex
@@ -29,6 +28,7 @@
   , group
   , groupBy
   , index
+  , indices
   , inits
   , intercalate
   , intersperse
@@ -39,12 +39,15 @@
   , map
   , mapAccumL
   , mapAccumR
+  , nonOverlappingIndices
   , notElem
   , null
   , pack
   , packCString
   , packCStringLen
   , partition
+  , random
+  , replace
   , replicate
   , reverse
   , scanl
@@ -58,6 +61,8 @@
   , spanEnd
   , split
   , splitAt
+  , splitKeepEnd
+  , splitKeepFront
   , splitWith
   , stripPrefix
   , stripSuffix
@@ -81,6 +86,10 @@
   , unpackedBytes
   ) where
 
-import Data.ByteString
-import Data.ByteString.Lens
+import Data.ByteString              hiding (split)
+import Data.ByteString.Lens         (bytes, packedBytes, unpackedBytes)
 import Data.ByteString.Lex.Integral (asHexadecimal)
+import Data.ByteString.Random.MWC   (random)
+import Data.ByteString.Search       (breakAfter, breakOn, indices,
+                                     nonOverlappingIndices, replace, split,
+                                     splitKeepEnd, splitKeepFront)
diff --git a/src/ByteString/Lazy.hs b/src/ByteString/Lazy.hs
--- a/src/ByteString/Lazy.hs
+++ b/src/ByteString/Lazy.hs
@@ -1,11 +1,23 @@
 module ByteString.Lazy
   ( -- FIXME
     module Data.ByteString.Lazy
+  , breakAfter
+  , breakFindAfter
+  , breakOn
+  , indices
+  , nonOverlappingIndices
+  , replace
+  , split
+  , splitKeepEnd
+  , splitKeepFront
     -- ** Optics
   , bytes
   , packedBytes
   , unpackedBytes
   ) where
 
-import Data.ByteString.Lazy
-import Data.ByteString.Lens (bytes, packedBytes, unpackedBytes)
+import Data.ByteString.Lazy        hiding (split)
+import Data.ByteString.Lazy.Search (breakAfter, breakFindAfter, breakOn,
+                                    indices, nonOverlappingIndices, replace,
+                                    split, splitKeepEnd, splitKeepFront)
+import Data.ByteString.Lens        (bytes, packedBytes, unpackedBytes)
diff --git a/src/ByteString/Lazy/Builder.hs b/src/ByteString/Lazy/Builder.hs
new file mode 100644
--- /dev/null
+++ b/src/ByteString/Lazy/Builder.hs
@@ -0,0 +1,5 @@
+module ByteString.Lazy.Builder
+  ( module Data.ByteString.Builder
+  ) where
+
+import Data.ByteString.Builder
diff --git a/src/Compactable.hs b/src/Compactable.hs
new file mode 100644
--- /dev/null
+++ b/src/Compactable.hs
@@ -0,0 +1,12 @@
+module Compactable
+  ( Compactable(..)
+  , fforMaybe
+  , fforEither
+  , CompactFold(..)
+  , fforFold
+  , fforBifold
+  ) where
+
+import Control.Compactable (CompactFold(applyBifold, applyFold, bindBifold, bindFold, compactFold, fmapBifold, fmapFold, separateFold, traverseBifold, traverseFold),
+                            Compactable(applyEither, applyMaybe, bindEither, bindMaybe, compact, filter, fmapEither, fmapMaybe, partition, separate, traverseEither, traverseMaybe),
+                            fforBifold, fforEither, fforFold, fforMaybe)
diff --git a/src/Concurrency/TBQueue.hs b/src/Concurrency/TBQueue.hs
--- a/src/Concurrency/TBQueue.hs
+++ b/src/Concurrency/TBQueue.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Concurrency.TBQueue
   (
     TBQueue
@@ -12,11 +14,15 @@
   , unGetTBQueue
   , isEmptyTBQueue
   , isFullTBQueue
+#if MIN_VERSION_stm(2,5,0)
+  , lengthTBQueue
+#endif
   ) where
 
 import Control.Concurrent.STM.TBQueue (flushTBQueue)
-import UnliftIO.STM                   (TBQueue, isEmptyTBQueue, isFullTBQueue,
-                                       newTBQueue, newTBQueueIO, peekTBQueue,
-                                       readTBQueue, tryPeekTBQueue,
-                                       tryReadTBQueue, unGetTBQueue,
-                                       writeTBQueue)
+#if MIN_VERSION_stm(2,5,0)
+import Control.Concurrent.STM.TBQueue (lengthTBQueue)
+#endif
+import UnliftIO.STM (TBQueue, isEmptyTBQueue, isFullTBQueue, newTBQueue,
+                     newTBQueueIO, peekTBQueue, readTBQueue, tryPeekTBQueue,
+                     tryReadTBQueue, unGetTBQueue, writeTBQueue)
diff --git a/src/Concurrency/TVar.hs b/src/Concurrency/TVar.hs
--- a/src/Concurrency/TVar.hs
+++ b/src/Concurrency/TVar.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Concurrency.TVar
   ( -- * TVar
     TVar
@@ -8,8 +10,14 @@
   , writeTVar
   , modifyTVar
   , modifyTVar'
+#if MIN_VERSION_stm(2,5,0)
+  , stateTVar
+#endif
   , swapTVar
   , mkWeakTVar
   ) where
 
 import UnliftIO.STM
+#if MIN_VERSION_stm(2,5,0)
+import Control.Concurrent.STM.TVar (stateTVar)
+#endif
diff --git a/src/Distributive.hs b/src/Distributive.hs
--- a/src/Distributive.hs
+++ b/src/Distributive.hs
@@ -3,7 +3,6 @@
     Distributive(..)
   , cotraverse
   , comapM
-  , fmapCollect
   ) where
 
 import Data.Distributive
diff --git a/src/Email.hs b/src/Email.hs
new file mode 100644
--- /dev/null
+++ b/src/Email.hs
@@ -0,0 +1,9 @@
+module Email
+  ( -- * Email address
+    EmailAddress
+  , validate
+  , toByteString
+  ) where
+
+import Text.Email.Parser (EmailAddress, toByteString)
+import Text.Email.Validate (validate)
diff --git a/src/Email/Unsafe.hs b/src/Email/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/Email/Unsafe.hs
@@ -0,0 +1,5 @@
+module Email.Unsafe
+  ( unsafeEmailAddress
+  ) where
+
+import Text.Email.Validate (unsafeEmailAddress)
diff --git a/src/Enum.hs b/src/Enum.hs
--- a/src/Enum.hs
+++ b/src/Enum.hs
@@ -1,5 +1,9 @@
 module Enum
   ( Enum(..)
+  , toEnumMay
+  , succMay
+  , predMay
   ) where
 
 import GHC.Enum
+import Safe     (predMay, succMay, toEnumMay)
diff --git a/src/File/Binary.hs b/src/File/Binary.hs
--- a/src/File/Binary.hs
+++ b/src/File/Binary.hs
@@ -21,8 +21,9 @@
   , putStr
   , hPutStr
   , hPutNonBlocking
+  , hPutSerialise
   ) where
 
-import Codec.Serialise (readFileDeserialise, writeFileSerialise)
+import Codec.Serialise (hPutSerialise, readFileDeserialise, writeFileSerialise)
 import Data.ByteString
 import UnliftIO.IO     (withBinaryFile)
diff --git a/src/File/Text.hs b/src/File/Text.hs
--- a/src/File/Text.hs
+++ b/src/File/Text.hs
@@ -20,12 +20,18 @@
   , hGetChunk
   , hGetContents
     -- ** Writing
+  , say
+  , sayString
+  , sayShow
+  , sayErr
+  , sayErrString
+  , sayErrShow
+  , hSay
+  , hSayString
+  , hSayShow
+    -- *** Writing (no newlines)
   , putStr
-  , putStrLn
-  , print
   , hPutStr
-  , hPutStrLn
-  , hPrint
     -- * File encoding
   , TextEncoding
   , hSetEncoding
@@ -43,7 +49,9 @@
 
 import Data.Text.IO
 import GHC.IO.Handle.FD (openFileBlocking)
-import System.IO        (TextEncoding, getChar, hGetChar, hGetEncoding, hPrint,
-                         hSetEncoding, latin1, print, utf16, utf16be, utf16le,
-                         utf32, utf32be, utf32le, utf8, utf8_bom)
+import Say              (hSay, hSayShow, hSayString, say, sayErr, sayErrShow,
+                         sayErrString, sayShow, sayString)
+import System.IO        (TextEncoding, getChar, hGetChar, hGetEncoding,
+                         hSetEncoding, latin1, utf16, utf16be, utf16le, utf32,
+                         utf32be, utf32le, utf8, utf8_bom)
 import UnliftIO.IO      (withFile)
diff --git a/src/Foldable.hs b/src/Foldable.hs
--- a/src/Foldable.hs
+++ b/src/Foldable.hs
@@ -2,30 +2,36 @@
   ( -- * Foldable
     Foldable(fold, foldMap, foldr, foldr', foldl', toList, null, length,
       elem, sum, product)
-  , foldrM
-  , foldlM
-  , traverse_
-  , for_
-  , sequenceA_
+  , all
+  , and
+  , any
   , asum
-  , msum
   , concatMap
-  , and
-  , or
-  , all
-  , notElem
   , find
+  , foldBy
   , foldM
   , foldM_
   , foldMapBy
-  , foldBy
-  , inits
-  , tails
-  , insert
+  , foldlM
+  , foldr1May
+  , foldrM
+  , for_
   , group
+  , groupAllWith
   , groupBy
   , groupWith
-  , groupAllWith
+  , inits
+  , insert
+  , maximumByMay
+  , maximumMay
+  , minimumByMay
+  , minimumMay
+  , msum
+  , notElem
+  , or
+  , sequenceA_
+  , tails
+  , traverse_
     -- * Foldable1
   , Foldable1(..)
   , asum1
@@ -36,13 +42,51 @@
   , intercalateMap1
   , sequenceA1_
   , traverse1_
+    -- * Bifoldable
+  , Bifoldable(..)
+  , bifoldr'
+  , bifoldrM
+  , bifoldl'
+  , bifoldlM
+  , bitraverse_
+  , bifor_
+  , bisequence_
+  , biasum
+  , biList
+  , binull
+  , bilength
+  , bielem
+  , bisum
+  , biproduct
+  , biconcatMap
+  , biand
+  , bior
+  , biany
+  , biall
+  , binotElem
+  , bifind
+    -- * Bifoldable1
+  , Bifoldable1(..)
+  , bitraverse1_
+  , bifor1_
+  , bisequenceA1_
   ) where
 
-import Control.Monad
+import Control.Monad             (foldM, foldM_)
+import Data.Bifoldable           (Bifoldable(bifold, bifoldMap, bifoldr),
+                                  biList, biall, biand, biany, biasum,
+                                  biconcatMap, bielem, bifind, bifoldl',
+                                  bifoldlM, bifoldr', bifoldrM, bifor_,
+                                  bilength, binotElem, binull, bior, biproduct,
+                                  bisequence_, bisum, bitraverse_)
 import Data.Foldable
-import Data.List.NonEmpty      (group, groupAllWith, groupBy, groupWith, inits,
-                                insert, tails)
+import Data.List.NonEmpty        (group, groupAllWith, groupBy, groupWith,
+                                  inits, insert, tails)
 import Data.Reflection
-import Data.Semigroup.Foldable (Foldable1(fold1, foldMap1, toNonEmpty), asum1,
-                                foldlM1, foldrM1, for1_, intercalate1,
-                                intercalateMap1, sequenceA1_, traverse1_)
+import Data.Semigroup.Bifoldable (Bifoldable1(bifold1, bifoldMap1), bifor1_,
+                                  bisequenceA1_, bitraverse1_)
+import Data.Semigroup.Foldable   (Foldable1(fold1, foldMap1, toNonEmpty), asum1,
+                                  foldlM1, foldrM1, for1_, intercalate1,
+                                  intercalateMap1, sequenceA1_, traverse1_)
+import Safe.Foldable             (foldr1May, maximumByMay, maximumMay,
+                                  minimumByMay, minimumMay)
diff --git a/src/Foldable/Partial.hs b/src/Foldable/Partial.hs
--- a/src/Foldable/Partial.hs
+++ b/src/Foldable/Partial.hs
@@ -1,9 +1,21 @@
 module Foldable.Partial
-  ( foldr1
+  ( -- * Foldable
+    findJust
+  , foldr1
   , maximum
   , maximumBy
   , minimum
   , minimumBy
+    -- * Bifoldable
+  , bifoldl1
+  , bifoldr1
+  , bimaximum
+  , bimaximumBy
+  , biminimum
+  , biminimumBy
   ) where
 
-import Data.Foldable
+import Data.Bifoldable (bifoldl1, bifoldr1, bimaximum, bimaximumBy, biminimum,
+                        biminimumBy)
+import Data.Foldable   (foldr1, maximum, maximumBy, minimum, minimumBy)
+import Safe.Foldable   (findJust)
diff --git a/src/Function.hs b/src/Function.hs
--- a/src/Function.hs
+++ b/src/Function.hs
@@ -9,6 +9,10 @@
   , loop
   , on
   , until
+  , curry
+  , curry3
+  , uncurry
+  , uncurry3
   , Endo(..)
   , Op(..)
   ) where
@@ -17,4 +21,6 @@
 import Data.Function
 import Data.Functor.Contravariant
 import Data.Semigroup             (Endo(Endo, appEndo))
+import Data.Tuple                 (curry, uncurry)
+import Data.Tuple.Extra           (curry3, uncurry3)
 import GHC.Base
diff --git a/src/Functor.hs b/src/Functor.hs
--- a/src/Functor.hs
+++ b/src/Functor.hs
@@ -27,13 +27,21 @@
   , (-<<)
     -- * Extend
   , Extend(..)
+    -- * Bifunctor
+  , Bifunctor(..)
+  , Swapped(..)
+    -- * Biapply
+  , Biapply(..)
     -- * MFunctor
   , MFunctor(..)
   ) where
 
-import Control.Lens.Setter (mapped)
-import Control.Monad.Morph (MFunctor, hoist)
-import Data.Functor        (Functor(fmap, (<$)), void, ($>), (<$>))
+import Control.Lens.Iso     (Swapped(swapped))
+import Control.Lens.Setter  (mapped)
+import Control.Monad.Morph  (MFunctor, hoist)
+import Data.Bifunctor
+import Data.Bifunctor.Apply (Biapply((.>>), (<<.), (<<.>>)))
+import Data.Functor         (Functor(fmap, (<$)), void, ($>), (<$>))
 #if MIN_VERSION_base(4,11,0)
 import Data.Functor ((<&>))
 #endif
diff --git a/src/IO.hs b/src/IO.hs
--- a/src/IO.hs
+++ b/src/IO.hs
@@ -6,6 +6,10 @@
   , timeout
   , once
   , onceFork
+    -- * Memoized IO
+  , Memoized
+  , runMemoized
+  , memoizeMVar
     -- * IO exceptions
   , module System.IO.Error
   ) where
@@ -14,4 +18,5 @@
 import Control.Monad.IO.Class   (MonadIO(..))
 import System.IO
 import System.IO.Error
+import UnliftIO.Memoize         (Memoized, memoizeMVar, runMemoized)
 import UnliftIO.Timeout         (timeout)
diff --git a/src/Lang/C.hs b/src/Lang/C.hs
new file mode 100644
--- /dev/null
+++ b/src/Lang/C.hs
@@ -0,0 +1,6 @@
+module Lang.C
+  ( module System.Posix.Types
+  ) where
+
+import System.Posix.Types
+
diff --git a/src/List.hs b/src/List.hs
--- a/src/List.hs
+++ b/src/List.hs
@@ -30,6 +30,8 @@
   , filter
   , findIndex
   , findIndices
+  , foldl1May'
+  , foldr1May
   , genericDrop
   , genericIndex
   , genericLength
@@ -42,6 +44,24 @@
   , groupSort
   , groupSortBy
   , groupSortOn
+  , iall
+  , iany
+  , iconcatMap
+  , idropWhile
+  , ifilter
+  , ifind
+  , ifindIndex
+  , ifindIndices
+  , ifoldMap
+  , ifoldl'
+  , ifoldlM
+  , ifoldr
+  , ifoldrM
+  , ifor
+  , ifor_
+  , imap
+  , imapAccumL
+  , imapAccumR
   , inits
   , insert
   , insertBy
@@ -49,16 +69,32 @@
   , intersect
   , intersectBy
   , intersperse
+  , ipartition
+  , ireplicateM
+  , ireplicateM_
   , isInfixOf
   , isPrefixOf
   , isSubsequenceOf
   , isSuffixOf
+  , itakeWhile
   , iterate
+  , itraverse
+  , itraverse_
 #if MIN_VERSION_base(4,11,0)
   , iterate'
 #endif
+  , izipWith
+  , izipWith3
+  , izipWith4
+  , izipWith5
+  , izipWith6
+  , izipWith7
   , lookup
   , map
+  , maximumByMay
+  , maximumMay
+  , minimumByMay
+  , minimumMay
   , nub
   , nubBy
   , nubOn
@@ -123,6 +159,12 @@
   , zipWith5
   , zipWith6
   , zipWith7
+    -- ** Diff algorithm
+  , Diff(..)
+  , getDiff
+  , getDiffBy
+  , getGroupedDiff
+  , getGroupedDiffBy
     -- ** String
   , String
   , words
@@ -142,20 +184,25 @@
   , suffixed
   ) where
 
-import Data.List (break, cycle, delete, deleteBy, deleteFirstsBy, drop,
-                  dropWhile, dropWhileEnd, elemIndex, elemIndices, filter,
-                  findIndex, findIndices, genericDrop, genericIndex,
-                  genericLength, genericReplicate, genericSplitAt, genericTake,
-                  group, groupBy, inits, insert, insertBy, intercalate,
-                  intersect, intersectBy, intersperse, isInfixOf, isPrefixOf,
-                  isSubsequenceOf, isSuffixOf, iterate, lines, lookup, map, nub,
-                  nubBy, partition, permutations, repeat, replicate, reverse,
-                  scanl, scanl', scanl1, scanr, scanr1, sort, sortBy, sortOn,
-                  span, splitAt, stripPrefix, subsequences, tails, take,
-                  takeWhile, transpose, uncons, unfoldr, union, unionBy,
-                  unlines, unwords, unzip, unzip3, unzip4, unzip5, unzip6,
-                  unzip7, words, zip, zip3, zip4, zip5, zip6, zip7, zipWith,
-                  zipWith3, zipWith4, zipWith5, zipWith6, zipWith7, (++), (\\))
+import Data.Algorithm.Diff (Diff(Both, First, Second), getDiff, getDiffBy,
+                            getGroupedDiff, getGroupedDiffBy)
+import Data.List           (break, cycle, delete, deleteBy, deleteFirstsBy,
+                            drop, dropWhile, dropWhileEnd, elemIndex,
+                            elemIndices, filter, findIndex, findIndices,
+                            genericDrop, genericIndex, genericLength,
+                            genericReplicate, genericSplitAt, genericTake,
+                            group, groupBy, inits, insert, insertBy,
+                            intercalate, intersect, intersectBy, intersperse,
+                            isInfixOf, isPrefixOf, isSubsequenceOf, isSuffixOf,
+                            iterate, lines, lookup, map, nub, nubBy, partition,
+                            permutations, repeat, replicate, reverse, scanl,
+                            scanl', scanl1, scanr, scanr1, sort, sortBy, sortOn,
+                            span, splitAt, stripPrefix, subsequences, tails,
+                            take, takeWhile, transpose, uncons, unfoldr, union,
+                            unionBy, unlines, unwords, unzip, unzip3, unzip4,
+                            unzip5, unzip6, unzip7, words, zip, zip3, zip4,
+                            zip5, zip6, zip7, zipWith, zipWith3, zipWith4,
+                            zipWith5, zipWith6, zipWith7, (++), (\\))
 #if MIN_VERSION_base(4,11,0)
 import Data.List (iterate')
 #endif
@@ -166,8 +213,16 @@
                         nubSortOn, snoc, spanEnd, split, splitAtEnd, stripInfix,
                         stripInfixEnd, stripSuffix, takeEnd, takeWhileEnd, trim,
                         trimEnd, trimStart, unsnoc, upper, wordsBy)
+import Data.List.Index (iall, iany, iconcatMap, idropWhile, ifilter, ifind,
+                        ifindIndex, ifindIndices, ifoldMap, ifoldl', ifoldlM,
+                        ifoldr, ifoldrM, ifor, ifor_, imap, imapAccumL,
+                        imapAccumR, ipartition, ireplicateM, ireplicateM_,
+                        itakeWhile, itraverse, itraverse_, izipWith, izipWith3,
+                        izipWith4, izipWith5, izipWith6, izipWith7)
 import Data.List.Lens  (prefixed, suffixed)
 import Data.List.Split (chop, divvy, endBy, splitOn)
 import Data.String     (IsString(fromString), String)
 import GHC.Show        (showString)
 import Numeric         (lexDigits)
+import Safe            (foldl1May', foldr1May, maximumByMay, maximumMay,
+                        minimumByMay, minimumMay)
diff --git a/src/List/Partial.hs b/src/List/Partial.hs
--- a/src/List/Partial.hs
+++ b/src/List/Partial.hs
@@ -1,11 +1,16 @@
 module List.Partial
   ( (!!)
   , chunksOf
+  , elemIndexJust
+  , findIndexJust
+  , findJust
   , head
   , init
   , last
+  , lookupJust
   , tail
   ) where
 
 import Data.List       (head, init, last, tail, (!!))
 import Data.List.Extra (chunksOf)
+import Safe            (elemIndexJust, findIndexJust, findJust, lookupJust)
diff --git a/src/Map/Hash/Linked.hs b/src/Map/Hash/Linked.hs
new file mode 100644
--- /dev/null
+++ b/src/Map/Hash/Linked.hs
@@ -0,0 +1,55 @@
+module Map.Hash.Linked
+  ( -- * InsOrdHashMap
+    InsOrdHashMap
+  , adjust
+  , alter
+  , delete
+  , difference
+  , elems
+  , empty
+  , filter
+  , filterWithKey
+  , foldMapWithKey
+  , foldl'
+  , foldlWithKey'
+  , foldr
+  , foldrWithKey
+  , fromHashMap
+  , fromList
+  , insert
+  , insertWith
+  , intersection
+  , intersectionWith
+  , intersectionWithKey
+  , keys
+  , lookup
+  , lookupDefault
+  , map
+  , mapKeys
+  , mapMaybe
+  , mapMaybeWithKey
+  , mapWithKey
+  , member
+  , null
+  , singleton
+  , size
+  , toHashMap
+  , toList
+  , toRevList
+  , traverseKeys
+  , traverseWithKey
+  , union
+  , unionWith
+  , unionWithKey
+  , unions
+  , unorderedFoldMap
+  , unorderedFoldMapWithKey
+  , unorderedTraverse
+  , unorderedTraverseWithKey
+  , update
+    -- ** Optics
+  , hashMap
+  , unorderedTraversal
+  ) where
+
+import Data.HashMap.Strict.InsOrd
diff --git a/src/Mitchell/Prelude.hs b/src/Mitchell/Prelude.hs
--- a/src/Mitchell/Prelude.hs
+++ b/src/Mitchell/Prelude.hs
@@ -40,6 +40,12 @@
     -- * Coerce
   , Coercible
   , coerce
+    -- * Compactable
+  , Compactable(..)
+  , fforMaybe
+  , fforEither
+    -- * Contravariant
+  , Contravariant(..)
     -- * Debug
   , trace
   , traceId
@@ -72,15 +78,12 @@
   , stdout
   , stderr
     -- * File.Text
-  , hGetChar
-  , hGetLine
-  , hGetContents
-  , putStr
-  , putStrLn
-  , print
-  , hPutStr
-  , hPutStrLn
-  , hPrint
+  , say
+  , sayString
+  , sayShow
+  , sayErr
+  , sayErrString
+  , sayErrShow
     -- * Foldable
   , Foldable(..)
   , foldrM
@@ -94,6 +97,7 @@
   , and
   , or
   , all
+  , any
   , notElem
   , find
   , foldM
@@ -170,50 +174,52 @@
   , Monoid
   , mconcat
   , mempty
-    -- * Numeric.Double
+    -- * Num.Double
   , Double
-    -- * Numeric.Float
+    -- * Num.Float
   , Float
-    -- * Numeric.Floating
+    -- * Num.Floating
   , Floating(..)
-    -- * Numeric.Fractional
+    -- * Num.Fractional
   , Fractional(..)
-    -- * Numeric.Int
+  , (^^)
+    -- * Num.Int
   , Int
   , Int8
   , Int16
   , Int32
   , Int64
-    -- * Numeric.Integer
+    -- * Num.Integer
   , Integer
-    -- * Numeric.Integral
+    -- * Num.Integral
   , Integral(..)
   , even
   , odd
   , gcd
   , lcm
   , fromIntegral
-    -- * Numeric.Nat
+    -- * Num.Nat
   , Nat
   , KnownNat
   , natVal
   , natVal'
   , SomeNat(..)
   , someNatVal
-    -- * Numeric.Num
+    -- * Num.Num
   , Num(..)
+  , (^)
   , subtract
-    -- * Numeric.Real
+    -- * Num.Real
   , Real(..)
   , div'
   , mod'
   , divMod'
   , realToFrac
-    -- * Numeric.RealFloat
+    -- * Num.RealFloat
   , RealFloat(..)
-    -- * Numeric.RealFrac
+    -- * Num.RealFrac
   , RealFrac(..)
-    -- * Numeric.Word
+    -- * Num.Word
   , Word
   , Word8
   , Word16
@@ -231,12 +237,14 @@
   , Lens
   , Lens'
   , lens
-    -- * Optic.Lens.At
+  , HasAny(..)
   , At(..)
     -- * Optic.Prism
   , Prism
+  , Prism'
   , prism
   , is
+  , AsAny(..)
     -- * Optic.Setter
   , (.~)
   , (%~)
@@ -244,10 +252,7 @@
   , set
     -- * Optic.Traversal
   , Traversal
-    -- * Optic.Traversal.Ixed
-  , Ixed(..)
-  , Index
-  , IxValue
+  , Traversal'
     -- * Ord
   , Ord(..)
   , Ordering(..)
@@ -294,26 +299,28 @@
 #if MIN_VERSION_base(4,11,0)
 import Clock (getMonotonicTime, getMonotonicTimeNSec)
 #endif
-import Coerce    (Coercible, coerce)
-import Debug     (trace, traceId, traceM, traceShow, traceShowId, traceShowM,
-                  traceStack)
-import Either    (Either(Left, Right), either)
-import Either    (eitherM)
-import Either    (_Left, _Right)
-import Enum      (Enum(enumFrom, enumFromThen, enumFromThenTo, enumFromTo, fromEnum, pred, succ, toEnum))
-import Equality  (Eq((/=), (==)))
-import Error     (assert, error, undefined)
-import Exception (Exception, SomeAsyncException(SomeAsyncException),
-                  SomeException(SomeException), throwIO)
-import File      (stderr, stdin, stdout)
-import File.Text (hGetChar, hPrint, print)
-import File.Text (hGetContents, hGetLine, hPutStr, hPutStrLn, putStr, putStrLn)
-import Foldable  (Foldable(elem, fold, foldMap, foldl', foldr, foldr', length, null, product, sum, toList),
-                  all, and, asum, concatMap, find, foldM, foldM_, foldlM,
-                  foldrM, for_, msum, notElem, or, sequenceA_, traverse_)
-import Foldable  (foldBy, foldMapBy)
-import Function  (Endo(Endo, appEndo), const, fix, flip, until, ($), ($!), (&))
-import Functor   (Functor(fmap, (<$)), void, ($>), (<$>))
+import Coerce        (Coercible, coerce)
+import Compactable   (Compactable(applyEither, applyMaybe, bindEither, bindMaybe, compact, filter, fmapEither, fmapMaybe, partition, separate, traverseEither, traverseMaybe),
+                      fforEither, fforMaybe)
+import Contravariant (Contravariant(contramap))
+import Debug         (trace, traceId, traceM, traceShow, traceShowId,
+                      traceShowM, traceStack)
+import Either        (Either(Left, Right), either, eitherM, _Left, _Right)
+import Enum          (Enum(enumFrom, enumFromThen, enumFromThenTo, enumFromTo, fromEnum, pred, succ, toEnum))
+import Equality      (Eq((/=), (==)))
+import Error         (assert, error, undefined)
+import Exception     (Exception, SomeAsyncException(SomeAsyncException),
+                      SomeException(SomeException), throwIO)
+import File          (stderr, stdin, stdout)
+import File.Text     (say, sayErr, sayErrShow, sayErrString, sayShow, sayString)
+import Foldable      (Foldable(elem, fold, foldMap, foldl', foldr, foldr', length, null, product, sum, toList),
+                      all, and, any, asum, concatMap, find, foldM, foldM_,
+                      foldlM, foldrM, for_, msum, notElem, or, sequenceA_,
+                      traverse_)
+import Foldable      (foldBy, foldMapBy)
+import Function      (Endo(Endo, appEndo), const, fix, flip, until, ($), ($!),
+                      (&))
+import Functor       (Functor(fmap, (<$)), void, ($>), (<$>))
 #if MIN_VERSION_base(4,11,0)
 import Functor ((<&>))
 #endif
@@ -325,52 +332,47 @@
 #if MIN_VERSION_base(4,11,0)
 import List (iterate')
 #endif
-import Map                  (Map)
-import Map.Hash             (HashMap)
-import Map.Int              (IntMap)
-import Maybe                (Maybe(Just, Nothing), catMaybes, fromMaybe,
-                             mapMaybe, maybe)
-import Maybe                (maybeM)
-import Maybe                (_Just, _Nothing)
-import Monad                (Monad((>>=)), (<=<), (=<<), (>=>))
-import Monad                (unlessM, whenJustM, whenM, whileM)
-import Monad.Trans          (MonadTrans(lift))
-import Monoid               (Monoid, mconcat, mempty)
-import Numeric.Double       (Double)
-import Numeric.Float        (Float)
-import Numeric.Floating     (Floating(..))
-import Numeric.Fractional   (Fractional(..))
-import Numeric.Int          (Int, Int16, Int32, Int64, Int8)
-import Numeric.Integer      (Integer)
-import Numeric.Integral     (Integral(..), even, fromIntegral, gcd, lcm, odd)
-import Numeric.Nat          (KnownNat, Nat, SomeNat(..), natVal, natVal',
-                             someNatVal)
-import Numeric.Num          (Num(..), subtract)
-import Numeric.Real         (Real(..), div', divMod', mod', realToFrac)
-import Numeric.RealFloat    (RealFloat(..))
-import Numeric.RealFrac     (RealFrac(..))
-import Numeric.Word         (Word, Word16, Word32, Word64, Word8)
-import Optic.Fold           (folded, has, preview, (^?))
-import Optic.Getting        (view, (^.))
-import Optic.Lens           (Lens, Lens', lens)
-import Optic.Lens.At        (At(at))
-import Optic.Prism          (Prism, is, prism)
-import Optic.Setter         (over, set, (%~), (.~))
-import Optic.Traversal      (Traversal)
-import Optic.Traversal.Ixed (Index, IxValue, Ixed(ix))
-import Ord                  (Ord(compare, max, min, (<), (<=), (>), (>=)),
-                             Ordering(EQ, GT, LT))
-import Semigroup            (Semigroup((<>)))
-import Sequence             (Seq)
-import Set                  (Set)
-import Set.Hash             (HashSet)
-import Set.Int              (IntSet)
-import Show                 (Show, show)
-import Text                 (Text)
-import Traversable          (Traversable(sequenceA, traverse), for)
-import Tuple                (fst, snd)
-import Tuple                (Field1(_1), Field2(_2), Field3(_3), Field4(_4),
-                             Field5(_5), Field6(_6))
-import Void                 (Void)
+import Map             (Map)
+import Map.Hash        (HashMap)
+import Map.Int         (IntMap)
+import Maybe           (Maybe(Just, Nothing), catMaybes, fromMaybe, mapMaybe,
+                        maybe)
+import Maybe           (maybeM, _Just, _Nothing)
+import Monad           (Monad((>>=)), unlessM, whenJustM, whenM, whileM, (<=<),
+                        (=<<), (>=>))
+import Monad.Trans     (MonadTrans(lift))
+import Monoid          (Monoid, mconcat, mempty)
+import Num.Double      (Double)
+import Num.Float       (Float)
+import Num.Floating    (Floating(..))
+import Num.Fractional  (Fractional(..), (^^))
+import Num.Int         (Int, Int16, Int32, Int64, Int8)
+import Num.Integer     (Integer)
+import Num.Integral    (Integral(..), even, fromIntegral, gcd, lcm, odd)
+import Num.Nat         (KnownNat, Nat, SomeNat(..), natVal, natVal', someNatVal)
+import Num.Num         (Num(..), subtract, (^))
+import Num.Real        (Real(..), div', divMod', mod', realToFrac)
+import Num.RealFloat   (RealFloat(..))
+import Num.RealFrac    (RealFrac(..))
+import Num.Word        (Word, Word16, Word32, Word64, Word8)
+import Optic.Fold      (folded, has, preview, (^?))
+import Optic.Getting   (view, (^.))
+import Optic.Lens      (At(at), HasAny(the), Lens, Lens', lens)
+import Optic.Prism     (AsAny(_As), Prism, Prism', is, prism)
+import Optic.Setter    (over, set, (%~), (.~))
+import Optic.Traversal (Traversal, Traversal')
+import Ord             (Ord(compare, max, min, (<), (<=), (>), (>=)),
+                        Ordering(EQ, GT, LT))
+import Semigroup       (Semigroup((<>)))
+import Sequence        (Seq)
+import Set             (Set)
+import Set.Hash        (HashSet)
+import Set.Int         (IntSet)
+import Show            (Show, show)
+import Text            (Text)
+import Traversable     (Traversable(sequenceA, traverse), for)
+import Tuple           (Field1(_1), Field2(_2), Field3(_3), Field4(_4),
+                        Field5(_5), Field6(_6), fst, snd)
+import Void            (Void)
 
 import Data.Orphans ()
diff --git a/src/Num/Approximate.hs b/src/Num/Approximate.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Approximate.hs
@@ -0,0 +1,12 @@
+module Num.Approximate
+  ( -- * Approximate
+    Approximate(..)
+  , HasApproximate(..)
+  , exact
+  , zero
+  , one
+  , withMin
+  , withMax
+  ) where
+
+import Data.Approximate.Type
diff --git a/src/Num/Complex.hs b/src/Num/Complex.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Complex.hs
@@ -0,0 +1,22 @@
+module Num.Complex
+  ( -- * Complex
+    Complex
+  , realPart
+  , imagPart
+  , mkPolar
+  , cis
+  , polar
+  , magnitude
+  , phase
+  , conjugate
+    -- ** Optics
+  , _realPart
+  , _imagPart
+  , _polar
+  , _magnitude
+  , _phase
+  , _conjugate
+  ) where
+
+import Data.Complex
+import Data.Complex.Lens
diff --git a/src/Num/Double.hs b/src/Num/Double.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Double.hs
@@ -0,0 +1,12 @@
+module Num.Double
+  ( -- * Double
+    Double
+  , toExponential
+  , toFixed
+  , toPrecision
+  , toShortest
+  ) where
+
+import Data.Double.Conversion.Text (toExponential, toFixed, toPrecision,
+                                    toShortest)
+import GHC.Float
diff --git a/src/Num/Erf.hs b/src/Num/Erf.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Erf.hs
@@ -0,0 +1,5 @@
+module Num.Erf
+  ( Erf(..)
+  ) where
+
+import Data.Number.Erf
diff --git a/src/Num/Fast.hs b/src/Num/Fast.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Fast.hs
@@ -0,0 +1,6 @@
+module Num.Fast
+  ( Fast(..)
+  , blog
+  ) where
+
+import Data.Approximate.Numerics
diff --git a/src/Num/Float.hs b/src/Num/Float.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Float.hs
@@ -0,0 +1,5 @@
+module Num.Float
+  ( Float
+  ) where
+
+import GHC.Float
diff --git a/src/Num/Floating.hs b/src/Num/Floating.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Floating.hs
@@ -0,0 +1,5 @@
+module Num.Floating
+  ( Floating(..)
+  ) where
+
+import GHC.Float
diff --git a/src/Num/Fractional.hs b/src/Num/Fractional.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Fractional.hs
@@ -0,0 +1,6 @@
+module Num.Fractional
+  ( Fractional(..)
+  , (^^)
+  ) where
+
+import GHC.Real
diff --git a/src/Num/Half.hs b/src/Num/Half.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Half.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE PackageImports, PatternSynonyms #-}
+
+module Num.Half
+  ( Half(..)
+  , isZero
+  , fromHalf
+  , toHalf
+  , pattern POS_INF
+  , pattern NEG_INF
+  , pattern QNaN
+  , pattern SNaN
+  , pattern HALF_MIN
+  , pattern HALF_NRM_MIN
+  , pattern HALF_MAX
+  , pattern HALF_EPSILON
+  , pattern HALF_DIG
+  , pattern HALF_MIN_10_EXP
+  , pattern HALF_MAX_10_EXP
+  ) where
+
+import "half" Numeric.Half
diff --git a/src/Num/Int.hs b/src/Num/Int.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Int.hs
@@ -0,0 +1,11 @@
+module Num.Int
+  ( Int
+  , intLog2
+  , Int8
+  , Int16
+  , Int32
+  , Int64
+  ) where
+
+import GHC.Int                      (Int, Int16, Int32, Int64, Int8)
+import Math.NumberTheory.Logarithms (intLog2)
diff --git a/src/Num/Integer.hs b/src/Num/Integer.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Integer.hs
@@ -0,0 +1,10 @@
+module Num.Integer
+  ( -- * Integer
+    Integer
+  , integerLogBase
+  , integerLog2
+  , integerLog10
+  ) where
+
+import GHC.Num
+import Math.NumberTheory.Logarithms (integerLog10, integerLog2, integerLogBase)
diff --git a/src/Num/Integer/Partial.hs b/src/Num/Integer/Partial.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Integer/Partial.hs
@@ -0,0 +1,6 @@
+module Num.Integer.Partial
+  ( digits
+  , undigits
+  ) where
+
+import Data.FastDigits (digits, undigits)
diff --git a/src/Num/Integral.hs b/src/Num/Integral.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Integral.hs
@@ -0,0 +1,17 @@
+module Num.Integral
+  ( -- * Integral
+    Integral(..)
+  , even
+  , odd
+  , gcd
+  , lcm
+  , fromIntegral
+    -- ** Show
+  , showInt
+  , showIntAtBase
+  , showOct
+  , showHex
+  ) where
+
+import GHC.Real
+import Numeric  (showHex, showInt, showIntAtBase, showOct)
diff --git a/src/Num/InvErf.hs b/src/Num/InvErf.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/InvErf.hs
@@ -0,0 +1,5 @@
+module Num.InvErf
+  ( InvErf(..)
+  ) where
+
+import Data.Number.Erf
diff --git a/src/Num/Nat.hs b/src/Num/Nat.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Nat.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE CPP, ExplicitNamespaces #-}
+#if __GLASGOW_HASKELL__ >= 806
+{-# LANGUAGE NoStarIsType #-}
+#endif
+
+module Num.Nat
+  ( -- * Nat
+    Nat
+  , KnownNat
+  , natVal
+  , natVal'
+  , SomeNat(..)
+  , someNatVal
+  , sameNat
+  , type (<=)
+  , type (<=?)
+  , type (+)
+  , type (*)
+  , type (^)
+  , type (-)
+  , Min
+  , Max
+  , Lcm
+  , Gcd
+  , Divides
+#if MIN_VERSION_base(4,11,0)
+  , Div
+  , Mod
+  , Log2
+#endif
+  , CmpNat
+    -- ** Constraints
+  , plusNat
+  , timesNat
+  , powNat
+  , minNat
+  , maxNat
+  , gcdNat
+  , lcmNat
+  , divNat
+  , modNat
+  , plusZero
+  , timesZero
+  , timesOne
+  , powZero
+  , powOne
+  , maxZero
+  , minZero
+  , gcdZero
+  , gcdOne
+  , lcmZero
+  , lcmOne
+  , plusAssociates
+  , timesAssociates
+  , minAssociates
+  , maxAssociates
+  , gcdAssociates
+  , lcmAssociates
+  , plusCommutes
+  , timesCommutes
+  , minCommutes
+  , maxCommutes
+  , gcdCommutes
+  , lcmCommutes
+  , plusDistributesOverTimes
+  , timesDistributesOverPow
+  , timesDistributesOverGcd
+  , timesDistributesOverLcm
+  , minDistributesOverPlus
+  , minDistributesOverTimes
+  , minDistributesOverPow1
+  , minDistributesOverPow2
+  , minDistributesOverMax
+  , maxDistributesOverPlus
+  , maxDistributesOverTimes
+  , maxDistributesOverPow1
+  , maxDistributesOverPow2
+  , maxDistributesOverMin
+  , gcdDistributesOverLcm
+  , lcmDistributesOverGcd
+  , minIsIdempotent
+  , maxIsIdempotent
+  , lcmIsIdempotent
+  , gcdIsIdempotent
+  , plusIsCancellative
+  , timesIsCancellative
+  , dividesPlus
+  , dividesTimes
+  , dividesMin
+  , dividesMax
+  , dividesPow
+  , dividesGcd
+  , dividesLcm
+  , plusMonotone1
+  , plusMonotone2
+  , timesMonotone1
+  , timesMonotone2
+  , powMonotone1
+  , powMonotone2
+  , minMonotone1
+  , minMonotone2
+  , maxMonotone1
+  , maxMonotone2
+  , divMonotone1
+  , divMonotone2
+  , euclideanNat
+  , plusMod
+  , timesMod
+  , modBound
+  , dividesDef
+  , timesDiv
+  , eqLe
+  , leEq
+  , leId
+  , leTrans
+  , zeroLe
+  , plusMinusInverse1
+  , plusMinusInverse2
+  , plusMinusInverse3
+  ) where
+
+import Data.Constraint.Nat
+import GHC.TypeLits
diff --git a/src/Num/Natural.hs b/src/Num/Natural.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Natural.hs
@@ -0,0 +1,9 @@
+module Num.Natural
+  ( Natural
+  , naturalLogBase
+  , naturalLog2
+  , naturalLog10
+  ) where
+
+import Math.NumberTheory.Logarithms (naturalLog10, naturalLog2, naturalLogBase)
+import Numeric.Natural (Natural)
diff --git a/src/Num/Natural/Partial.hs b/src/Num/Natural/Partial.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Natural/Partial.hs
@@ -0,0 +1,5 @@
+module Num.Natural.Partial
+  ( digitsUnsigned
+  ) where
+
+import Data.FastDigits (digitsUnsigned)
diff --git a/src/Num/Num.hs b/src/Num/Num.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Num.hs
@@ -0,0 +1,14 @@
+module Num.Num
+  ( Num(..)
+  , (^)
+  , subtract
+    -- ** Read
+  , readInt
+  , readDec
+  , readOct
+  , readHex
+  ) where
+
+import GHC.Num (Num(..), subtract)
+import GHC.Real ((^))
+import Numeric
diff --git a/src/Num/Pi.hs b/src/Num/Pi.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Pi.hs
@@ -0,0 +1,19 @@
+module Num.Pi
+  ( ExactPi(..)
+  , approximateValue
+  , isZero
+  , isExact
+  , isExactZero
+  , isExactOne
+  , areExactlyEqual
+  , isExactInteger
+  , toExactInteger
+  , isExactRational
+  , toExactRational
+  , rationalApproximations
+  ) where
+
+import Data.ExactPi (ExactPi(Approximate, Exact), approximateValue,
+                     areExactlyEqual, isExact, isExactInteger, isExactOne,
+                     isExactRational, isExactZero, isZero,
+                     rationalApproximations, toExactInteger, toExactRational)
diff --git a/src/Num/Product.hs b/src/Num/Product.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Product.hs
@@ -0,0 +1,5 @@
+module Num.Product
+  ( Product(..)
+  ) where
+
+import Data.Monoid
diff --git a/src/Num/Ratio.hs b/src/Num/Ratio.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Ratio.hs
@@ -0,0 +1,12 @@
+module Num.Ratio
+  ( Ratio
+  , Rational
+  , (%)
+  , numerator
+  , denominator
+  , approxRational
+  , fromRat
+  ) where
+
+import Data.Ratio
+import GHC.Float  (fromRat)
diff --git a/src/Num/Real.hs b/src/Num/Real.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Real.hs
@@ -0,0 +1,16 @@
+module Num.Real
+  ( -- * Real
+    Real(..)
+  , div'
+  , mod'
+  , divMod'
+  , realToFrac
+    -- ** Show
+  , showSigned
+    -- ** Read
+  , readSigned
+  ) where
+
+import Data.Fixed (div', divMod', mod')
+import GHC.Real   (Real(..), realToFrac, showSigned)
+import Numeric    (readSigned)
diff --git a/src/Num/RealFloat.hs b/src/Num/RealFloat.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/RealFloat.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE CPP #-}
+
+module Num.RealFloat
+  ( -- * RealFloat
+    RealFloat(..)
+  , floatToDigits
+    -- ** Show
+  , showEFloat
+  , showFFloat
+  , showGFloat
+  , showFFloatAlt
+  , showGFloatAlt
+  , showFloat
+#if MIN_VERSION_base(4,11,0)
+  , showHFloat
+#endif
+  ) where
+
+import GHC.Float
+import Numeric
diff --git a/src/Num/RealFrac.hs b/src/Num/RealFrac.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/RealFrac.hs
@@ -0,0 +1,9 @@
+module Num.RealFrac
+  ( -- * RealFrac
+    RealFrac(..)
+    -- ** Read
+  , readFloat
+  ) where
+
+import GHC.Real (RealFrac(..))
+import Numeric  (readFloat)
diff --git a/src/Num/Scientific.hs b/src/Num/Scientific.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Scientific.hs
@@ -0,0 +1,5 @@
+module Num.Scientific
+  ( module Data.Scientific
+  ) where
+
+import Data.Scientific
diff --git a/src/Num/Sum.hs b/src/Num/Sum.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Sum.hs
@@ -0,0 +1,5 @@
+module Num.Sum
+  ( Sum(..)
+  ) where
+
+import Data.Monoid
diff --git a/src/Num/Word.hs b/src/Num/Word.hs
new file mode 100644
--- /dev/null
+++ b/src/Num/Word.hs
@@ -0,0 +1,16 @@
+module Num.Word
+  ( -- * Word
+    Word
+  , wordLog2
+  , Word8
+  , Word16
+  , byteSwap16
+  , Word32
+  , byteSwap32
+  , Word64
+  , byteSwap64
+  ) where
+
+import GHC.Word                     (Word, Word16, Word32, Word64, Word8,
+                                     byteSwap16, byteSwap32, byteSwap64)
+import Math.NumberTheory.Logarithms (wordLog2)
diff --git a/src/Numeric/Approximate.hs b/src/Numeric/Approximate.hs
deleted file mode 100644
--- a/src/Numeric/Approximate.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Numeric.Approximate
-  ( -- * Approximate
-    Approximate(..)
-  , HasApproximate(..)
-  , exact
-  , zero
-  , one
-  , withMin
-  , withMax
-  ) where
-
-import Data.Approximate.Type
diff --git a/src/Numeric/Complex.hs b/src/Numeric/Complex.hs
deleted file mode 100644
--- a/src/Numeric/Complex.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-module Numeric.Complex
-  ( -- * Complex
-    Complex
-  , realPart
-  , imagPart
-  , mkPolar
-  , cis
-  , polar
-  , magnitude
-  , phase
-  , conjugate
-    -- ** Optics
-  , _realPart
-  , _imagPart
-  , _polar
-  , _magnitude
-  , _phase
-  , _conjugate
-  ) where
-
-import Data.Complex
-import Data.Complex.Lens
diff --git a/src/Numeric/Double.hs b/src/Numeric/Double.hs
deleted file mode 100644
--- a/src/Numeric/Double.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Numeric.Double
-  ( -- * Double
-    Double
-  , toExponential
-  , toFixed
-  , toPrecision
-  , toShortest
-  ) where
-
-import Data.Double.Conversion.Text (toExponential, toFixed, toPrecision,
-                                    toShortest)
-import GHC.Float
diff --git a/src/Numeric/Erf.hs b/src/Numeric/Erf.hs
deleted file mode 100644
--- a/src/Numeric/Erf.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Erf
-  ( Erf(..)
-  ) where
-
-import Data.Number.Erf
diff --git a/src/Numeric/Fast.hs b/src/Numeric/Fast.hs
deleted file mode 100644
--- a/src/Numeric/Fast.hs
+++ /dev/null
@@ -1,6 +0,0 @@
-module Numeric.Fast
-  ( Fast(..)
-  , blog
-  ) where
-
-import Data.Approximate.Numerics
diff --git a/src/Numeric/Float.hs b/src/Numeric/Float.hs
deleted file mode 100644
--- a/src/Numeric/Float.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Float
-  ( Float
-  ) where
-
-import GHC.Float
diff --git a/src/Numeric/Floating.hs b/src/Numeric/Floating.hs
deleted file mode 100644
--- a/src/Numeric/Floating.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Floating
-  ( Floating(..)
-  ) where
-
-import GHC.Float
diff --git a/src/Numeric/Fractional.hs b/src/Numeric/Fractional.hs
deleted file mode 100644
--- a/src/Numeric/Fractional.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Fractional
-  ( Fractional(..)
-  ) where
-
-import GHC.Real
diff --git a/src/Numeric/Half.hs b/src/Numeric/Half.hs
deleted file mode 100644
--- a/src/Numeric/Half.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE PackageImports, PatternSynonyms #-}
-
-module Numeric.Half
-  ( Half(..)
-  , isZero
-  , fromHalf
-  , toHalf
-  , pattern POS_INF
-  , pattern NEG_INF
-  , pattern QNaN
-  , pattern SNaN
-  , pattern HALF_MIN
-  , pattern HALF_NRM_MIN
-  , pattern HALF_MAX
-  , pattern HALF_EPSILON
-  , pattern HALF_DIG
-  , pattern HALF_MIN_10_EXP
-  , pattern HALF_MAX_10_EXP
-  ) where
-
-import "half" Numeric.Half
diff --git a/src/Numeric/Int.hs b/src/Numeric/Int.hs
deleted file mode 100644
--- a/src/Numeric/Int.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-module Numeric.Int
-  ( Int
-  , intLog2
-  , Int8
-  , Int16
-  , Int32
-  , Int64
-  ) where
-
-import GHC.Int                      (Int, Int16, Int32, Int64, Int8)
-import Math.NumberTheory.Logarithms (intLog2)
diff --git a/src/Numeric/Integer.hs b/src/Numeric/Integer.hs
deleted file mode 100644
--- a/src/Numeric/Integer.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-module Numeric.Integer
-  ( -- * Integer
-    Integer
-  , integerLogBase
-  , integerLog2
-  , integerLog10
-  ) where
-
-import GHC.Num
-import Math.NumberTheory.Logarithms (integerLog10, integerLog2, integerLogBase)
diff --git a/src/Numeric/Integral.hs b/src/Numeric/Integral.hs
deleted file mode 100644
--- a/src/Numeric/Integral.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-module Numeric.Integral
-  ( -- * Integral
-    Integral(..)
-  , even
-  , odd
-  , gcd
-  , lcm
-  , fromIntegral
-    -- ** Show
-  , showInt
-  , showIntAtBase
-  , showOct
-  , showHex
-  ) where
-
-import GHC.Real
-import Numeric  (showHex, showInt, showIntAtBase, showOct)
diff --git a/src/Numeric/InvErf.hs b/src/Numeric/InvErf.hs
deleted file mode 100644
--- a/src/Numeric/InvErf.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.InvErf
-  ( InvErf(..)
-  ) where
-
-import Data.Number.Erf
diff --git a/src/Numeric/Nat.hs b/src/Numeric/Nat.hs
deleted file mode 100644
--- a/src/Numeric/Nat.hs
+++ /dev/null
@@ -1,120 +0,0 @@
-{-# LANGUAGE CPP, ExplicitNamespaces #-}
-#if __GLASGOW_HASKELL__ >= 806
-{-# LANGUAGE NoStarIsType #-}
-#endif
-
-module Numeric.Nat
-  ( -- * Nat
-    Nat
-  , KnownNat
-  , natVal
-  , natVal'
-  , SomeNat(..)
-  , someNatVal
-  , sameNat
-  , type (<=)
-  , type (<=?)
-  , type (+)
-  , type (*)
-  , type (^)
-  , type (-)
-  , Min
-  , Max
-  , Lcm
-  , Gcd
-  , Divides
-#if MIN_VERSION_base(4,11,0)
-  , Div
-  , Mod
-  , Log2
-#endif
-  , CmpNat
-    -- ** Constraints
-  , plusNat
-  , timesNat
-  , powNat
-  , minNat
-  , maxNat
-  , gcdNat
-  , lcmNat
-  , divNat
-  , modNat
-  , plusZero
-  , timesZero
-  , timesOne
-  , powZero
-  , powOne
-  , maxZero
-  , minZero
-  , gcdZero
-  , gcdOne
-  , lcmZero
-  , lcmOne
-  , plusAssociates
-  , timesAssociates
-  , minAssociates
-  , maxAssociates
-  , gcdAssociates
-  , lcmAssociates
-  , plusCommutes
-  , timesCommutes
-  , minCommutes
-  , maxCommutes
-  , gcdCommutes
-  , lcmCommutes
-  , plusDistributesOverTimes
-  , timesDistributesOverPow
-  , timesDistributesOverGcd
-  , timesDistributesOverLcm
-  , minDistributesOverPlus
-  , minDistributesOverTimes
-  , minDistributesOverPow1
-  , minDistributesOverPow2
-  , minDistributesOverMax
-  , maxDistributesOverPlus
-  , maxDistributesOverTimes
-  , maxDistributesOverPow1
-  , maxDistributesOverPow2
-  , maxDistributesOverMin
-  , gcdDistributesOverLcm
-  , lcmDistributesOverGcd
-  , minIsIdempotent
-  , maxIsIdempotent
-  , lcmIsIdempotent
-  , gcdIsIdempotent
-  , plusIsCancellative
-  , timesIsCancellative
-  , dividesPlus
-  , dividesTimes
-  , dividesMin
-  , dividesMax
-  , dividesPow
-  , dividesGcd
-  , dividesLcm
-  , plusMonotone1
-  , plusMonotone2
-  , timesMonotone1
-  , timesMonotone2
-  , powMonotone1
-  , powMonotone2
-  , minMonotone1
-  , minMonotone2
-  , maxMonotone1
-  , maxMonotone2
-  , divMonotone1
-  , divMonotone2
-  , euclideanNat
-  , plusMod
-  , timesMod
-  , modBound
-  , dividesDef
-  , timesDiv
-  , eqLe
-  , leEq
-  , leId
-  , leTrans
-  , zeroLe
-  ) where
-
-import Data.Constraint.Nat
-import GHC.TypeLits
diff --git a/src/Numeric/Natural.hs b/src/Numeric/Natural.hs
deleted file mode 100644
--- a/src/Numeric/Natural.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-{-# LANGUAGE PackageImports #-}
-
-module Numeric.Natural
-  ( Natural
-  , naturalLogBase
-  , naturalLog2
-  , naturalLog10
-  ) where
-
-import Math.NumberTheory.Logarithms (naturalLog10, naturalLog2, naturalLogBase)
-import "base" Numeric.Natural
diff --git a/src/Numeric/Num.hs b/src/Numeric/Num.hs
deleted file mode 100644
--- a/src/Numeric/Num.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Numeric.Num
-  ( Num(..)
-  , subtract
-    -- ** Read
-  , readInt
-  , readDec
-  , readOct
-  , readHex
-  ) where
-
-import GHC.Num (Num(..), subtract)
-import Numeric
diff --git a/src/Numeric/Product.hs b/src/Numeric/Product.hs
deleted file mode 100644
--- a/src/Numeric/Product.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Product
-  ( Product(..)
-  ) where
-
-import Data.Monoid
diff --git a/src/Numeric/Ratio.hs b/src/Numeric/Ratio.hs
deleted file mode 100644
--- a/src/Numeric/Ratio.hs
+++ /dev/null
@@ -1,12 +0,0 @@
-module Numeric.Ratio
-  ( Ratio
-  , Rational
-  , (%)
-  , numerator
-  , denominator
-  , approxRational
-  , fromRat
-  ) where
-
-import Data.Ratio
-import GHC.Float  (fromRat)
diff --git a/src/Numeric/Real.hs b/src/Numeric/Real.hs
deleted file mode 100644
--- a/src/Numeric/Real.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-module Numeric.Real
-  ( -- * Real
-    Real(..)
-  , div'
-  , mod'
-  , divMod'
-  , realToFrac
-    -- ** Show
-  , showSigned
-    -- ** Read
-  , readSigned
-  ) where
-
-import Data.Fixed (div', divMod', mod')
-import GHC.Real   (Real(..), realToFrac, showSigned)
-import Numeric    (readSigned)
diff --git a/src/Numeric/RealFloat.hs b/src/Numeric/RealFloat.hs
deleted file mode 100644
--- a/src/Numeric/RealFloat.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-{-# LANGUAGE CPP #-}
-
-module Numeric.RealFloat
-  ( -- * RealFloat
-    RealFloat(..)
-  , floatToDigits
-    -- ** Show
-  , showEFloat
-  , showFFloat
-  , showGFloat
-  , showFFloatAlt
-  , showGFloatAlt
-  , showFloat
-#if MIN_VERSION_base(4,11,0)
-  , showHFloat
-#endif
-  ) where
-
-import GHC.Float
-import Numeric
diff --git a/src/Numeric/RealFrac.hs b/src/Numeric/RealFrac.hs
deleted file mode 100644
--- a/src/Numeric/RealFrac.hs
+++ /dev/null
@@ -1,9 +0,0 @@
-module Numeric.RealFrac
-  ( -- * RealFrac
-    RealFrac(..)
-    -- ** Read
-  , readFloat
-  ) where
-
-import GHC.Real (RealFrac(..))
-import Numeric  (readFloat)
diff --git a/src/Numeric/Scientific.hs b/src/Numeric/Scientific.hs
deleted file mode 100644
--- a/src/Numeric/Scientific.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Scientific
-  ( module Data.Scientific
-  ) where
-
-import Data.Scientific
diff --git a/src/Numeric/Sum.hs b/src/Numeric/Sum.hs
deleted file mode 100644
--- a/src/Numeric/Sum.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Numeric.Sum
-  ( Sum(..)
-  ) where
-
-import Data.Monoid
diff --git a/src/Numeric/Word.hs b/src/Numeric/Word.hs
deleted file mode 100644
--- a/src/Numeric/Word.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-module Numeric.Word
-  ( -- * Word
-    Word
-  , wordLog2
-  , Word8
-  , Word16
-  , byteSwap16
-  , Word32
-  , byteSwap32
-  , Word64
-  , byteSwap64
-  ) where
-
-import GHC.Word (Word, Word16, Word32, Word64, Word8, byteSwap16, byteSwap32,
-                 byteSwap64)
-import Math.NumberTheory.Logarithms (wordLog2)
diff --git a/src/Optic/Fold/Unsafe.hs b/src/Optic/Fold/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/src/Optic/Fold/Unsafe.hs
@@ -0,0 +1,5 @@
+module Optic.Fold.Unsafe
+  ( (^?!)
+  ) where
+
+import Control.Lens.Fold ((^?!))
diff --git a/src/Optic/Iso.hs b/src/Optic/Iso.hs
--- a/src/Optic/Iso.hs
+++ b/src/Optic/Iso.hs
@@ -9,6 +9,14 @@
   , curried
   , uncurried
   , flipped
+    -- * Reversing
+  , Reversing(..)
+  , reversed
+    -- * Strict
+  , Strict(..)
+  , lazy
   ) where
 
-import Control.Lens.Iso
+import Control.Lens.Iso (Iso, Iso', Reversing(reversing), Strict(strict),
+                         curried, enum, flipped, from, iso, lazy, reversed,
+                         uncurried, under)
diff --git a/src/Optic/Iso/Reversing.hs b/src/Optic/Iso/Reversing.hs
deleted file mode 100644
--- a/src/Optic/Iso/Reversing.hs
+++ /dev/null
@@ -1,7 +0,0 @@
-module Optic.Iso.Reversing
-  ( -- * Reversing
-    Reversing(..)
-  , reversed
-  ) where
-
-import Control.Lens.Iso (Reversing(reversing), reversed)
diff --git a/src/Optic/Iso/Strict.hs b/src/Optic/Iso/Strict.hs
deleted file mode 100644
--- a/src/Optic/Iso/Strict.hs
+++ /dev/null
@@ -1,7 +0,0 @@
-module Optic.Iso.Strict
-  ( -- * Strict
-    Strict(..)
-  , lazy
-  ) where
-
-import Control.Lens.Iso (Strict(strict), lazy)
diff --git a/src/Optic/Lens.hs b/src/Optic/Lens.hs
--- a/src/Optic/Lens.hs
+++ b/src/Optic/Lens.hs
@@ -3,6 +3,21 @@
     Lens
   , Lens'
   , lens
+    -- * HasAny
+  , HasAny(..)
+    -- * Subtype
+  , Subtype(..)
+    -- * At
+  , At(..)
+  , sans
+  , Index
+  , IxValue
+    -- * Contains
+  , Contains(..)
   ) where
 
-import Control.Lens.Lens (Lens, Lens', lens)
+import Control.Lens.At               (At(at), Contains(contains), Index,
+                                      IxValue, sans)
+import Control.Lens.Lens             (Lens, Lens', lens)
+import Data.Generics.Product.Any     (HasAny(the))
+import Data.Generics.Product.Subtype (Subtype(smash, super, upcast))
diff --git a/src/Optic/Lens/At.hs b/src/Optic/Lens/At.hs
deleted file mode 100644
--- a/src/Optic/Lens/At.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-module Optic.Lens.At
-  ( -- * At
-    At(..)
-  , sans
-    -- ** Re-exports
-  , module Optic.Traversal.Ixed
-  ) where
-
-import Control.Lens.At      (At(at), sans)
-import Optic.Traversal.Ixed
diff --git a/src/Optic/Lens/Contains.hs b/src/Optic/Lens/Contains.hs
deleted file mode 100644
--- a/src/Optic/Lens/Contains.hs
+++ /dev/null
@@ -1,7 +0,0 @@
-module Optic.Lens.Contains
-  ( -- * Contains
-    Contains(..)
-  , Index
-  ) where
-
-import Control.Lens.At (Contains(contains), Index)
diff --git a/src/Optic/Prism.hs b/src/Optic/Prism.hs
--- a/src/Optic/Prism.hs
+++ b/src/Optic/Prism.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE PatternSynonyms #-}
+
 module Optic.Prism
   ( -- * Prism
     Prism
@@ -6,7 +8,36 @@
   , prism'
   , is
   , only
+    -- * AsAny
+  , AsAny(..)
+    -- * AsSubtype
+  , AsSubtype(..)
+    -- * Cons
+  , Cons(..)
+  , (<|)
+  , cons
+  , uncons
+  , _head
+  , _tail
+  , pattern (:<)
+    -- * Snoc
+  , Snoc(..)
+  , (|>)
+  , snoc
+  , unsnoc
+  , _init
+  , _last
+  , pattern (:>)
+    -- * Empty
+  , AsEmpty(..)
+  , pattern Empty
   ) where
 
-import Control.Lens.Extras (is)
-import Control.Lens.Prism  (Prism, Prism', only, prism, prism')
+import Control.Lens.Cons         (pattern (:<), pattern (:>), Cons(_Cons),
+                                  Snoc(_Snoc), cons, snoc, uncons, unsnoc, (<|),
+                                  _head, _init, _last, _tail, (|>))
+import Control.Lens.Empty        (AsEmpty(_Empty), pattern Empty)
+import Control.Lens.Extras       (is)
+import Control.Lens.Prism        (Prism, Prism', only, prism, prism')
+import Data.Generics.Sum.Any     (AsAny(_As))
+import Data.Generics.Sum.Subtype (AsSubtype(_Sub))
diff --git a/src/Optic/Prism/Cons.hs b/src/Optic/Prism/Cons.hs
deleted file mode 100644
--- a/src/Optic/Prism/Cons.hs
+++ /dev/null
@@ -1,15 +0,0 @@
-{-# LANGUAGE PatternSynonyms #-}
-
-module Optic.Prism.Cons
-  ( -- * Cons
-    Cons(..)
-  , (<|)
-  , cons
-  , uncons
-  , _head
-  , _tail
-  , pattern (:<)
-  ) where
-
-import Control.Lens.Cons (pattern (:<), Cons(_Cons), cons, uncons, (<|), _head,
-                          _tail)
diff --git a/src/Optic/Prism/Empty.hs b/src/Optic/Prism/Empty.hs
deleted file mode 100644
--- a/src/Optic/Prism/Empty.hs
+++ /dev/null
@@ -1,9 +0,0 @@
-{-# LANGUAGE PatternSynonyms #-}
-
-module Optic.Prism.Empty
-  ( -- * Empty
-    AsEmpty(..)
-  , pattern Empty
-  ) where
-
-import Control.Lens.Empty (AsEmpty(_Empty), pattern Empty)
diff --git a/src/Optic/Prism/Snoc.hs b/src/Optic/Prism/Snoc.hs
deleted file mode 100644
--- a/src/Optic/Prism/Snoc.hs
+++ /dev/null
@@ -1,15 +0,0 @@
-{-# LANGUAGE PatternSynonyms #-}
-
-module Optic.Prism.Snoc
-  ( -- * Snoc
-    Snoc(..)
-  , (|>)
-  , snoc
-  , unsnoc
-  , _init
-  , _last
-  , pattern (:>)
-  ) where
-
-import Control.Lens.Cons (pattern (:>), Snoc(_Snoc), snoc, unsnoc, _init, _last,
-                          (|>))
diff --git a/src/Optic/Traversal.hs b/src/Optic/Traversal.hs
--- a/src/Optic/Traversal.hs
+++ b/src/Optic/Traversal.hs
@@ -5,7 +5,17 @@
   , traverseOf
   , forOf
   , sequenceAOf
+  , types
+    -- * Each
+  , Each(..)
+    -- * Ixed
+  , Ixed(..)
+  , Index
+  , IxValue
   ) where
 
-import Control.Lens.Traversal (Traversal, Traversal', forOf, sequenceAOf,
-                               traverseOf)
+import Control.Lens.At             (Index, IxValue, Ixed(ix))
+import Control.Lens.Each           (Each(each))
+import Control.Lens.Traversal      (Traversal, Traversal', forOf, sequenceAOf,
+                                    traverseOf)
+import Data.Generics.Product.Types (types)
diff --git a/src/Optic/Traversal/Each.hs b/src/Optic/Traversal/Each.hs
deleted file mode 100644
--- a/src/Optic/Traversal/Each.hs
+++ /dev/null
@@ -1,6 +0,0 @@
-module Optic.Traversal.Each
-  ( -- * Each
-    Each(..)
-  ) where
-
-import Control.Lens.Each (Each(each))
diff --git a/src/Optic/Traversal/Ixed.hs b/src/Optic/Traversal/Ixed.hs
deleted file mode 100644
--- a/src/Optic/Traversal/Ixed.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-module Optic.Traversal.Ixed
-  ( -- * Ixed
-    Ixed(..)
-  , Index
-  , IxValue
-  ) where
-
-import Control.Lens.At (Index, IxValue, Ixed(ix))
diff --git a/src/Parallelism.hs b/src/Parallelism.hs
--- a/src/Parallelism.hs
+++ b/src/Parallelism.hs
@@ -3,6 +3,7 @@
   , pseq
   , rpar
   , rparWith
+  , parEval
   , parTraversable
   , parList
   , parListChunk
diff --git a/src/Parser/Cli.hs b/src/Parser/Cli.hs
--- a/src/Parser/Cli.hs
+++ b/src/Parser/Cli.hs
@@ -1,3 +1,5 @@
+-- | Command-line parsers.
+
 module Parser.Cli
   ( module Options.Applicative
   ) where
diff --git a/src/Parser/Env.hs b/src/Parser/Env.hs
deleted file mode 100644
--- a/src/Parser/Env.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Parser.Env
-  ( module Env
-  ) where
-
-import Env
diff --git a/src/Posix.hs b/src/Posix.hs
deleted file mode 100644
--- a/src/Posix.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Posix
-  ( module System.Posix.Types
-  ) where
-
-import System.Posix.Types
diff --git a/src/Signal.hs b/src/Signal.hs
new file mode 100644
--- /dev/null
+++ b/src/Signal.hs
@@ -0,0 +1,65 @@
+module Signal
+  ( -- * Signals
+    Signal
+  , sigABRT
+  , sigALRM
+  , sigBUS
+  , sigCHLD
+  , sigCONT
+  , sigFPE
+  , sigHUP
+  , sigILL
+  , sigINT
+  , sigKILL
+  , sigPIPE
+  , sigPOLL
+  , sigPROF
+  , sigQUIT
+  , sigSEGV
+  , sigSTOP
+  , sigSYS
+  , sigTERM
+  , sigTRAP
+  , sigTSTP
+  , sigTTIN
+  , sigTTOU
+  , sigURG
+  , sigUSR1
+  , sigUSR2
+  , sigVTALRM
+  , sigXCPU
+  , sigXFSZ
+    -- * Sending signals
+  , raiseSignal
+  , signalProcess
+  , signalProcessGroup
+    -- * Handling signals
+  , installHandler
+  , Handler(..)
+  , SignalInfo(..)
+  , SignalSpecificInfo(..)
+    -- * Signal sets
+  , SignalSet
+  , emptySignalSet
+  , fullSignalSet
+  , reservedSignals
+  , addSignal
+  , deleteSignal
+  , inSignalSet
+    -- * Signal mask
+  , getSignalMask
+  , setSignalMask
+  , blockSignals
+  , unblockSignals
+    -- * Alarm timer
+  , scheduleAlarm
+    -- * Waiting for signals
+  , getPendingSignals
+  , awaitSignal
+    -- * NOCLDSTOP
+  , setStoppedChildFlag
+  , queryStoppedChildFlag
+  ) where
+
+import System.Posix.Signals
+
diff --git a/src/Test.hs b/src/Test.hs
deleted file mode 100644
--- a/src/Test.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Test
-  ( module Hedgehog
-  ) where
-
-import Hedgehog
diff --git a/src/Test/Gen.hs b/src/Test/Gen.hs
deleted file mode 100644
--- a/src/Test/Gen.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Test.Gen
-  ( module Hedgehog.Gen
-  ) where
-
-import Hedgehog.Gen
diff --git a/src/Test/Range.hs b/src/Test/Range.hs
deleted file mode 100644
--- a/src/Test/Range.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Test.Range
-  ( module Hedgehog.Range
-  ) where
-
-import Hedgehog.Range
diff --git a/src/Text.hs b/src/Text.hs
--- a/src/Text.hs
+++ b/src/Text.hs
@@ -3,8 +3,6 @@
 module Text
   ( -- * Text
     Text
-  , Reader
-  , IReader
   , all
   , any
   , append
@@ -20,7 +18,6 @@
   , concatMap
   , cons
   , copy
-  , decimal
   , decodeUtf8'
   , double
   , drop
@@ -41,7 +38,6 @@
   , foldr
   , group
   , groupBy
-  , hexadecimal
   , inits
   , intercalate
   , intersperse
@@ -66,7 +62,6 @@
   , scanl1
   , scanr
   , scanr1
-  , signed
   , singleton
   , snoc
   , span
@@ -98,6 +93,22 @@
   , words
   , zip
   , zipWith
+    -- ** Similarity metrics
+  , levenshtein
+  , levenshteinNorm
+  , damerauLevenshtein
+  , damerauLevenshteinNorm
+  , overlap
+  , jaccard
+  , hamming
+  , jaro
+  , jaroWinkler
+    -- ** Number conversion
+  , Reader
+  , IReader
+  , decimal
+  , hexadecimal
+  , signed
     -- ** Optics
   , packed
   , unpacked
@@ -108,5 +119,6 @@
 import Data.Text
 import Data.Text.Encoding
 import Data.Text.Internal.Read (IReader)
+import Data.Text.Metrics
 import Data.Text.Read
 import Data.Text.Strict.Lens   (builder, packed, text, unpacked)
diff --git a/src/Text/QQ.hs b/src/Text/QQ.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/QQ.hs
@@ -0,0 +1,5 @@
+module Text.QQ
+  ( text
+  ) where
+
+import NeatInterpolation (text)
diff --git a/src/Traversable.hs b/src/Traversable.hs
--- a/src/Traversable.hs
+++ b/src/Traversable.hs
@@ -6,16 +6,31 @@
   , mapAccumR
   , traverseBy
   , sequenceBy
-    -- ** Default @Functor@ implementation
-  , fmapDefault
-    -- ** Default @Foldable@ implementation
-  , foldMapDefault
     -- * Traversable1
   , Traversable1(..)
+    -- * Bitraversable
+  , Bitraversable(..)
+  , bisequence
+  , bifor
+  , bimapAccumL
+  , bimapAccumR
+    -- * Bitraversable1
+  , Bitraversable1(..)
+    -- * Default implementations
+  , fmapDefault
+  , foldMapDefault
+  , bimapDefault
+  , bifoldMapDefault
+  , bifoldMap1Default
   ) where
 
-import Data.Reflection            (sequenceBy, traverseBy)
-import Data.Semigroup.Traversable (Traversable1(sequence1, traverse1))
-import Data.Traversable           (Traversable(sequenceA, traverse),
-                                   fmapDefault, foldMapDefault, for, mapAccumL,
-                                   mapAccumR)
+import Data.Bitraversable           (Bitraversable(bitraverse),
+                                     bifoldMapDefault, bifor, bimapAccumL,
+                                     bimapAccumR, bimapDefault, bisequence)
+import Data.Reflection              (sequenceBy, traverseBy)
+import Data.Semigroup.Bitraversable (Bitraversable1(bisequence1, bitraverse1),
+                                     bifoldMap1Default)
+import Data.Semigroup.Traversable   (Traversable1(sequence1, traverse1))
+import Data.Traversable             (Traversable(sequenceA, traverse),
+                                     fmapDefault, foldMapDefault, for,
+                                     mapAccumL, mapAccumR)
diff --git a/src/Tuple.hs b/src/Tuple.hs
--- a/src/Tuple.hs
+++ b/src/Tuple.hs
@@ -1,8 +1,6 @@
 module Tuple
   ( fst
   , snd
-  , curry
-  , uncurry
   , swap
   , dupe
     -- ** Optics
diff --git a/src/Unique.hs b/src/Unique.hs
--- a/src/Unique.hs
+++ b/src/Unique.hs
@@ -1,7 +1,6 @@
 module Unique
   ( Unique
   , newUnique
-  , hashUnique
   ) where
 
-import Data.Unique
+import Control.Concurrent.Unique (Unique, newUnique)
diff --git a/src/Weigh.hs b/src/Weigh.hs
deleted file mode 100644
--- a/src/Weigh.hs
+++ /dev/null
@@ -1,7 +0,0 @@
-{-# LANGUAGE PackageImports #-}
-
-module Weigh
-  ( module X
-  ) where
-
-import "weigh" Weigh as X
