diff --git a/LICENCE b/LICENCE
new file mode 100644
--- /dev/null
+++ b/LICENCE
@@ -0,0 +1,77 @@
+CSIRO Open Source Software License Agreement (variation of the BSD / MIT
+License)
+
+Copyright (c) 2016, Commonwealth Scientific and Industrial Research Organisation
+(CSIRO) ABN 41 687 119 230.
+
+All rights reserved. CSIRO is willing to grant you a license to this
+aemo-webservice on the following terms, except where otherwise indicated for
+third party material.
+
+Redistribution and use of this software in source and binary forms, with or
+without modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+  list of conditions and the following disclaimer in the documentation and/or
+  other materials provided with the distribution.
+
+* Neither the name of CSIRO nor the names of its contributors may be used to
+  endorse or promote products derived from this software without specific prior
+  written permission of CSIRO.
+
+EXCEPT AS EXPRESSLY STATED IN THIS AGREEMENT AND TO THE FULL EXTENT PERMITTED BY
+APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS-IS". CSIRO MAKES NO
+REPRESENTATIONS, WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO ANY REPRESENTATIONS, WARRANTIES OR CONDITIONS
+REGARDING THE CONTENTS OR ACCURACY OF THE SOFTWARE, OR OF TITLE,
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, THE ABSENCE
+OF LATENT OR OTHER DEFECTS, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+DISCOVERABLE.
+
+TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL CSIRO BE
+LIABLE ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, IN AN ACTION FOR
+BREACH OF CONTRACT, NEGLIGENCE OR OTHERWISE) FOR ANY CLAIM, LOSS, DAMAGES OR
+OTHER LIABILITY HOWSOEVER INCURRED.  WITHOUT LIMITING THE SCOPE OF THE PREVIOUS
+SENTENCE THE EXCLUSION OF LIABILITY SHALL INCLUDE: LOSS OF PRODUCTION OR
+OPERATION TIME, LOSS, DAMAGE OR CORRUPTION OF DATA OR RECORDS; OR LOSS OF
+ANTICIPATED SAVINGS, OPPORTUNITY, REVENUE, PROFIT OR GOODWILL, OR OTHER ECONOMIC
+LOSS; OR ANY SPECIAL, INCIDENTAL, INDIRECT, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
+DAMAGES, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, ACCESS OF THE
+SOFTWARE OR ANY OTHER DEALINGS WITH THE SOFTWARE, EVEN IF CSIRO HAS BEEN ADVISED
+OF THE POSSIBILITY OF SUCH CLAIM, LOSS, DAMAGES OR OTHER LIABILITY.
+
+APPLICABLE LEGISLATION SUCH AS THE AUSTRALIAN CONSUMER LAW MAY APPLY
+REPRESENTATIONS, WARRANTIES, OR CONDITIONS, OR IMPOSES OBLIGATIONS OR LIABILITY
+ON CSIRO THAT CANNOT BE EXCLUDED, RESTRICTED OR MODIFIED TO THE FULL EXTENT SET
+OUT IN THE EXPRESS TERMS OF THIS CLAUSE ABOVE "CONSUMER GUARANTEES".  TO THE
+EXTENT THAT SUCH CONSUMER GUARANTEES CONTINUE TO APPLY, THEN TO THE FULL EXTENT
+PERMITTED BY THE APPLICABLE LEGISLATION, THE LIABILITY OF CSIRO UNDER THE
+RELEVANT CONSUMER GUARANTEE IS LIMITED (WHERE PERMITTED AT CSIRO'S OPTION) TO
+ONE OF FOLLOWING REMEDIES OR SUBSTANTIALLY EQUIVALENT REMEDIES:
+
+(a)               THE REPLACEMENT OF THE SOFTWARE, THE SUPPLY OF EQUIVALENT
+                  SOFTWARE, OR SUPPLYING RELEVANT SERVICES AGAIN;
+(b)               THE REPAIR OF THE SOFTWARE;
+(c)               THE PAYMENT OF THE COST OF REPLACING THE
+                  SOFTWARE, OF ACQUIRING EQUIVALENT SOFTWARE, HAVING THE
+                  RELEVANT SERVICES SUPPLIED AGAIN, OR HAVING THE SOFTWARE
+                  REPAIRED.
+
+IN THIS CLAUSE, CSIRO INCLUDES ANY THIRD PARTY AUTHOR OR OWNER OF ANY PART OF
+THE SOFTWARE OR MATERIAL DISTRIBUTED WITH IT.  CSIRO MAY ENFORCE ANY RIGHTS ON
+BEHALF OF THE RELEVANT THIRD PARTY.
+
+Third Party Components
+
+The following third party components are distributed with the Software.  You
+agree to comply with the license terms for these components as part of accessing
+the Software.  Other third party software may also be identified in separate
+files distributed with the Software.
+
+___________________________________________________________________
+
+___________________________________________________________________
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
--- a/LICENSE
+++ /dev/null
@@ -1,77 +0,0 @@
-CSIRO Open Source Software License Agreement (variation of the BSD / MIT
-License)
-
-Copyright (c) 2016, Commonwealth Scientific and Industrial Research Organisation
-(CSIRO) ABN 41 687 119 230.
-
-All rights reserved. CSIRO is willing to grant you a license to this
-aemo-webservice on the following terms, except where otherwise indicated for
-third party material.
-
-Redistribution and use of this software in source and binary forms, with or
-without modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright notice, this
-  list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice, this
-  list of conditions and the following disclaimer in the documentation and/or
-  other materials provided with the distribution.
-
-* Neither the name of CSIRO nor the names of its contributors may be used to
-  endorse or promote products derived from this software without specific prior
-  written permission of CSIRO.
-
-EXCEPT AS EXPRESSLY STATED IN THIS AGREEMENT AND TO THE FULL EXTENT PERMITTED BY
-APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS-IS". CSIRO MAKES NO
-REPRESENTATIONS, WARRANTIES OR CONDITIONS OF ANY KIND, EXPRESS OR IMPLIED,
-INCLUDING BUT NOT LIMITED TO ANY REPRESENTATIONS, WARRANTIES OR CONDITIONS
-REGARDING THE CONTENTS OR ACCURACY OF THE SOFTWARE, OR OF TITLE,
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, THE ABSENCE
-OF LATENT OR OTHER DEFECTS, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
-DISCOVERABLE.
-
-TO THE FULL EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL CSIRO BE
-LIABLE ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, IN AN ACTION FOR
-BREACH OF CONTRACT, NEGLIGENCE OR OTHERWISE) FOR ANY CLAIM, LOSS, DAMAGES OR
-OTHER LIABILITY HOWSOEVER INCURRED.  WITHOUT LIMITING THE SCOPE OF THE PREVIOUS
-SENTENCE THE EXCLUSION OF LIABILITY SHALL INCLUDE: LOSS OF PRODUCTION OR
-OPERATION TIME, LOSS, DAMAGE OR CORRUPTION OF DATA OR RECORDS; OR LOSS OF
-ANTICIPATED SAVINGS, OPPORTUNITY, REVENUE, PROFIT OR GOODWILL, OR OTHER ECONOMIC
-LOSS; OR ANY SPECIAL, INCIDENTAL, INDIRECT, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY
-DAMAGES, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT, ACCESS OF THE
-SOFTWARE OR ANY OTHER DEALINGS WITH THE SOFTWARE, EVEN IF CSIRO HAS BEEN ADVISED
-OF THE POSSIBILITY OF SUCH CLAIM, LOSS, DAMAGES OR OTHER LIABILITY.
-
-APPLICABLE LEGISLATION SUCH AS THE AUSTRALIAN CONSUMER LAW MAY APPLY
-REPRESENTATIONS, WARRANTIES, OR CONDITIONS, OR IMPOSES OBLIGATIONS OR LIABILITY
-ON CSIRO THAT CANNOT BE EXCLUDED, RESTRICTED OR MODIFIED TO THE FULL EXTENT SET
-OUT IN THE EXPRESS TERMS OF THIS CLAUSE ABOVE "CONSUMER GUARANTEES".  TO THE
-EXTENT THAT SUCH CONSUMER GUARANTEES CONTINUE TO APPLY, THEN TO THE FULL EXTENT
-PERMITTED BY THE APPLICABLE LEGISLATION, THE LIABILITY OF CSIRO UNDER THE
-RELEVANT CONSUMER GUARANTEE IS LIMITED (WHERE PERMITTED AT CSIRO'S OPTION) TO
-ONE OF FOLLOWING REMEDIES OR SUBSTANTIALLY EQUIVALENT REMEDIES:
-
-(a)               THE REPLACEMENT OF THE SOFTWARE, THE SUPPLY OF EQUIVALENT
-                  SOFTWARE, OR SUPPLYING RELEVANT SERVICES AGAIN;
-(b)               THE REPAIR OF THE SOFTWARE;
-(c)               THE PAYMENT OF THE COST OF REPLACING THE
-                  SOFTWARE, OF ACQUIRING EQUIVALENT SOFTWARE, HAVING THE
-                  RELEVANT SERVICES SUPPLIED AGAIN, OR HAVING THE SOFTWARE
-                  REPAIRED.
-
-IN THIS CLAUSE, CSIRO INCLUDES ANY THIRD PARTY AUTHOR OR OWNER OF ANY PART OF
-THE SOFTWARE OR MATERIAL DISTRIBUTED WITH IT.  CSIRO MAY ENFORCE ANY RIGHTS ON
-BEHALF OF THE RELEVANT THIRD PARTY.
-
-Third Party Components
-
-The following third party components are distributed with the Software.  You
-agree to comply with the license terms for these components as part of accessing
-the Software.  Other third party software may also be identified in separate
-files distributed with the Software.
-
-___________________________________________________________________
-
-___________________________________________________________________
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/Setup.lhs b/Setup.lhs
deleted file mode 100644
--- a/Setup.lhs
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env runhaskell
-\begin{code}
-{-# OPTIONS_GHC -Wall #-}
-module Main (main) where
-
-import Data.List ( nub )
-import Data.Version ( showVersion )
-import Distribution.Package ( PackageName(PackageName), PackageId, InstalledPackageId, packageVersion, packageName )
-import Distribution.PackageDescription ( PackageDescription(), TestSuite(..) )
-import Distribution.Simple ( defaultMainWithHooks, UserHooks(..), simpleUserHooks )
-import Distribution.Simple.Utils ( rewriteFile, createDirectoryIfMissingVerbose )
-import Distribution.Simple.BuildPaths ( autogenModulesDir )
-import Distribution.Simple.Setup ( BuildFlags(buildVerbosity), fromFlag )
-import Distribution.Simple.LocalBuildInfo ( withLibLBI, withTestLBI, LocalBuildInfo(), ComponentLocalBuildInfo(componentPackageDeps) )
-import Distribution.Verbosity ( Verbosity )
-import System.FilePath ( (</>) )
-
-main :: IO ()
-main = defaultMainWithHooks simpleUserHooks
-  { buildHook = \pkg lbi hooks flags -> do
-     generateBuildModule (fromFlag (buildVerbosity flags)) pkg lbi
-     buildHook simpleUserHooks pkg lbi hooks flags
-  }
-
-generateBuildModule :: Verbosity -> PackageDescription -> LocalBuildInfo -> IO ()
-generateBuildModule verbosity pkg lbi = do
-  let dir = autogenModulesDir lbi
-  createDirectoryIfMissingVerbose verbosity True dir
-  withLibLBI pkg lbi $ \_ libcfg -> do
-    withTestLBI pkg lbi $ \suite suitecfg -> do
-      rewriteFile (dir </> "Build_" ++ testName suite ++ ".hs") $ unlines
-        [ "module Build_" ++ testName suite ++ " where"
-        , "deps :: [String]"
-        , "deps = " ++ (show $ formatdeps (testDeps libcfg suitecfg))
-        ]
-  where
-    formatdeps = map (formatone . snd)
-    formatone p = case packageName p of
-      PackageName n -> n ++ "-" ++ showVersion (packageVersion p)
-
-testDeps :: ComponentLocalBuildInfo -> ComponentLocalBuildInfo -> [(InstalledPackageId, PackageId)]
-testDeps xs ys = nub $ componentPackageDeps xs ++ componentPackageDeps ys
-
-\end{code}
diff --git a/papa-base-export.cabal b/papa-base-export.cabal
--- a/papa-base-export.cabal
+++ b/papa-base-export.cabal
@@ -1,7 +1,7 @@
 name:               papa-base-export
-version:            0.3.0
+version:            0.3.1
 license:            BSD3
-license-file:       LICENSE
+license-file:       LICENCE
 author:             Queensland Functional Programming Lab <oᴉ˙ldɟb@llǝʞsɐɥ>
 maintainer:         Queensland Functional Programming Lab <oᴉ˙ldɟb@llǝʞsɐɥ>
 copyright:          Copyright (c) 2017, Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230.
@@ -14,7 +14,7 @@
 homepage:           https://github.com/qfpl/papa
 bug-reports:        https://github.com/qfpl/papa/issues
 cabal-version:      >= 1.10
-build-type:         Custom
+build-type:         Simple
 extra-source-files: changelog.md
 
 source-repository   head
@@ -65,28 +65,3 @@
                     Papa.Base.Export.Data.Traversable
                     Papa.Base.Export.Data.Void
                     Papa.Base.Export.Prelude
-
-test-suite doctests
-  type:
-                    exitcode-stdio-1.0
-
-  main-is:
-                    doctests.hs
-
-  default-language:
-                    Haskell2010
-
-  build-depends:
-                    base < 5 && >= 3
-                    , doctest >= 0.9.7
-                    , filepath >= 1.3
-                    , directory >= 1.1
-                    , QuickCheck >= 2.0
-                    , template-haskell >= 2.8
-
-  ghc-options:
-                    -Wall
-                    -threaded
-
-  hs-source-dirs:
-                    test
diff --git a/src/Papa/Base/Export.hs b/src/Papa/Base/Export.hs
--- a/src/Papa/Base/Export.hs
+++ b/src/Papa/Base/Export.hs
@@ -1,29 +1,49 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export(
-  module P
+    module Papa.Base.Export.Control.Applicative,
+    module Papa.Base.Export.Control.Category,
+    module Papa.Base.Export.Control.Monad,
+    module Papa.Base.Export.Data.Bool,
+    module Papa.Base.Export.Data.Char,
+    module Papa.Base.Export.Data.Either,
+    module Papa.Base.Export.Data.Eq,
+    module Papa.Base.Export.Data.Foldable,
+    module Papa.Base.Export.Data.Function,
+    module Papa.Base.Export.Data.Functor,
+    module Papa.Base.Export.Data.Int,
+    module Papa.Base.Export.Data.List,
+    module Papa.Base.Export.Data.List.NonEmpty,
+    module Papa.Base.Export.Data.Maybe,
+    module Papa.Base.Export.Data.Monoid,
+    module Papa.Base.Export.Data.Ord,
+    module Papa.Base.Export.Data.Ratio,
+    module Papa.Base.Export.Data.Semigroup,
+    module Papa.Base.Export.Data.String,
+    module Papa.Base.Export.Data.Traversable,
+    module Papa.Base.Export.Data.Void,
+    module Papa.Base.Export.Prelude
 ) where
 
-import Papa.Base.Export.Control.Applicative as P
-import Papa.Base.Export.Control.Category as P
-import Papa.Base.Export.Control.Monad as P
-import Papa.Base.Export.Data.Bool as P
-import Papa.Base.Export.Data.Char as P
-import Papa.Base.Export.Data.Either as P
-import Papa.Base.Export.Data.Eq as P
-import Papa.Base.Export.Data.Foldable as P
-import Papa.Base.Export.Data.Function as P
-import Papa.Base.Export.Data.Functor as P
-import Papa.Base.Export.Data.Int as P
-import Papa.Base.Export.Data.List as P
-import Papa.Base.Export.Data.List.NonEmpty as P
-import Papa.Base.Export.Data.Maybe as P
-import Papa.Base.Export.Data.Monoid as P
-import Papa.Base.Export.Data.Ord as P
-import Papa.Base.Export.Data.Ratio as P
-import Papa.Base.Export.Data.Semigroup as P
-import Papa.Base.Export.Data.String as P
-import Papa.Base.Export.Data.Traversable as P
-import Papa.Base.Export.Data.Void as P
-import Papa.Base.Export.Prelude as P
-
+import Papa.Base.Export.Control.Applicative
+import Papa.Base.Export.Control.Category
+import Papa.Base.Export.Control.Monad
+import Papa.Base.Export.Data.Bool
+import Papa.Base.Export.Data.Char
+import Papa.Base.Export.Data.Either
+import Papa.Base.Export.Data.Eq
+import Papa.Base.Export.Data.Foldable
+import Papa.Base.Export.Data.Function
+import Papa.Base.Export.Data.Functor
+import Papa.Base.Export.Data.Int
+import Papa.Base.Export.Data.List
+import Papa.Base.Export.Data.List.NonEmpty
+import Papa.Base.Export.Data.Maybe
+import Papa.Base.Export.Data.Monoid
+import Papa.Base.Export.Data.Ord
+import Papa.Base.Export.Data.Ratio
+import Papa.Base.Export.Data.Semigroup
+import Papa.Base.Export.Data.String
+import Papa.Base.Export.Data.Traversable
+import Papa.Base.Export.Data.Void
+import Papa.Base.Export.Prelude
diff --git a/src/Papa/Base/Export/Control/Applicative.hs b/src/Papa/Base/Export/Control/Applicative.hs
--- a/src/Papa/Base/Export/Control/Applicative.hs
+++ b/src/Papa/Base/Export/Control/Applicative.hs
@@ -1,10 +1,22 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Control.Applicative(
-  module P
+    Applicative(pure, (<*>), (*>), (<*))
+  , Alternative(empty, (<|>), some, many)
+  , Const(getConst)
+  , WrappedMonad(unwrapMonad)
+  , WrappedArrow(unwrapArrow)
+  , ZipList(getZipList)
+  , (<$>)
+  , (<$)
+  , (<**>)
+  , liftA
+  , liftA2
+  , liftA3
+  , optional
 ) where
 
-import Control.Applicative as P(
+import Control.Applicative (
     Applicative(pure, (<*>), (*>), (<*))
   , Alternative(empty, (<|>), some, many)
   , Const(getConst)
diff --git a/src/Papa/Base/Export/Control/Category.hs b/src/Papa/Base/Export/Control/Category.hs
--- a/src/Papa/Base/Export/Control/Category.hs
+++ b/src/Papa/Base/Export/Control/Category.hs
@@ -1,9 +1,9 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Control.Category(
-  module P
+    Category(id, (.))
 ) where
 
-import Control.Category as P(
+import Control.Category (
     Category(id, (.))
   )
diff --git a/src/Papa/Base/Export/Control/Monad.hs b/src/Papa/Base/Export/Control/Monad.hs
--- a/src/Papa/Base/Export/Control/Monad.hs
+++ b/src/Papa/Base/Export/Control/Monad.hs
@@ -1,10 +1,25 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Control.Monad(
-  module P
+    Functor(fmap)
+  , Monad((>>=), return, (>>))
+  , MonadPlus(mzero, mplus)
+  , forever
+  , void
+  , msum
+  , mfilter
+  , filterM
+  , foldM
+  , foldM_
+  , replicateM
+  , replicateM_
+  , guard
+  , when
+  , unless
+  , (<$!>)
 ) where
 
-import Control.Monad as P(
+import Control.Monad (
     Functor(fmap)
   , Monad((>>=), return, (>>))
   , MonadPlus(mzero, mplus)
diff --git a/src/Papa/Base/Export/Data/Bool.hs b/src/Papa/Base/Export/Data/Bool.hs
--- a/src/Papa/Base/Export/Data/Bool.hs
+++ b/src/Papa/Base/Export/Data/Bool.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Bool(
-  module P
+    (&&)
+  , (||)
+  , not
+  , otherwise
+  , bool
 ) where
 
-import Data.Bool as P(
+import Data.Bool (
     (&&)
   , (||)
   , not
diff --git a/src/Papa/Base/Export/Data/Char.hs b/src/Papa/Base/Export/Data/Char.hs
--- a/src/Papa/Base/Export/Data/Char.hs
+++ b/src/Papa/Base/Export/Data/Char.hs
@@ -1,10 +1,36 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Char(
-  module P
+    Char
+  , isControl
+  , isSpace
+  , isLower
+  , isUpper
+  , isAlpha
+  , isAlphaNum
+  , isPrint
+  , isDigit
+  , isOctDigit
+  , isHexDigit
+  , isLetter
+  , isMark
+  , isNumber
+  , isPunctuation
+  , isSymbol
+  , isSeparator
+  , isAscii
+  , isLatin1
+  , isAsciiUpper
+  , isAsciiLower
+  , GeneralCategory(UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter, NonSpacingMark, SpacingCombiningMark, EnclosingMark, DecimalNumber, LetterNumber, OtherNumber, ConnectorPunctuation, DashPunctuation, OpenPunctuation, ClosePunctuation, InitialQuote, FinalQuote, OtherPunctuation, MathSymbol, CurrencySymbol, ModifierSymbol, OtherSymbol, Space, LineSeparator, ParagraphSeparator, Control, Format, Surrogate, PrivateUse, NotAssigned)
+  , toUpper
+  , toLower
+  , toTitle
+  , ord
+  , chr
 ) where
 
-import Data.Char as P(
+import Data.Char (
     Char
   , isControl
   , isSpace
diff --git a/src/Papa/Base/Export/Data/Either.hs b/src/Papa/Base/Export/Data/Either.hs
--- a/src/Papa/Base/Export/Data/Either.hs
+++ b/src/Papa/Base/Export/Data/Either.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Either(
-  module P
+    Either(Left, Right)
+  , either
+  , isLeft
+  , isRight
+  , partitionEithers
 ) where
 
-import Data.Either as P(
+import Data.Either (
     Either(Left, Right)
   , either
   , isLeft
diff --git a/src/Papa/Base/Export/Data/Eq.hs b/src/Papa/Base/Export/Data/Eq.hs
--- a/src/Papa/Base/Export/Data/Eq.hs
+++ b/src/Papa/Base/Export/Data/Eq.hs
@@ -1,10 +1,10 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Eq(
-  module P
+    Eq((==), (/=))
 ) where
 
-import Data.Eq as P(
+import Data.Eq (
     Eq((==), (/=))
   )
 
diff --git a/src/Papa/Base/Export/Data/Foldable.hs b/src/Papa/Base/Export/Data/Foldable.hs
--- a/src/Papa/Base/Export/Data/Foldable.hs
+++ b/src/Papa/Base/Export/Data/Foldable.hs
@@ -1,10 +1,22 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Foldable(
-  module P
+    Foldable(fold, foldMap, foldr, foldr', foldl, foldl', toList, null, elem, sum, product)
+  , foldrM
+  , foldlM
+  , traverse_
+  , for_
+  , sequenceA_
+  , asum
+  , and
+  , or
+  , any
+  , all
+  , notElem
+  , find
 ) where
 
-import Data.Foldable as P(
+import Data.Foldable (
     Foldable(fold, foldMap, foldr, foldr', foldl, foldl', toList, null, elem, sum, product)
   , foldrM
   , foldlM
diff --git a/src/Papa/Base/Export/Data/Function.hs b/src/Papa/Base/Export/Data/Function.hs
--- a/src/Papa/Base/Export/Data/Function.hs
+++ b/src/Papa/Base/Export/Data/Function.hs
@@ -1,10 +1,13 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Function(
-  module P
+    ($)
+  , (&)
+  , fix
+  , on
 ) where
 
-import Data.Function as P(
+import Data.Function (
     ($)
   , (&)
   , fix
diff --git a/src/Papa/Base/Export/Data/Functor.hs b/src/Papa/Base/Export/Data/Functor.hs
--- a/src/Papa/Base/Export/Data/Functor.hs
+++ b/src/Papa/Base/Export/Data/Functor.hs
@@ -1,10 +1,13 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Functor(
-  module P
+    Functor(fmap, (<$))
+  , ($>)
+  , (<$>)
+  , void
 ) where
 
-import Data.Functor as P(
+import Data.Functor (
     Functor(fmap, (<$))
   , ($>)
   , (<$>)
diff --git a/src/Papa/Base/Export/Data/Int.hs b/src/Papa/Base/Export/Data/Int.hs
--- a/src/Papa/Base/Export/Data/Int.hs
+++ b/src/Papa/Base/Export/Data/Int.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Int(
-  module P
+    Int
+  , Int8
+  , Int16
+  , Int32
+  , Int64
 ) where
 
-import Data.Int as P(
+import Data.Int (
     Int
   , Int8
   , Int16
diff --git a/src/Papa/Base/Export/Data/List.hs b/src/Papa/Base/Export/Data/List.hs
--- a/src/Papa/Base/Export/Data/List.hs
+++ b/src/Papa/Base/Export/Data/List.hs
@@ -1,10 +1,70 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.List(
-  module P
+    null
+  , length
+  , reverse
+  , intersperse
+  , intercalate
+  , transpose
+  , subsequences
+  , permutations
+  , foldl
+  , foldl'
+  , foldr
+  , and
+  , or
+  , any
+  , all
+  , sum
+  , product
+  , mapAccumL
+  , mapAccumR
+  , replicate
+  , cycle
+  , take
+  , drop
+  , splitAt
+  , takeWhile
+  , dropWhile
+  , dropWhileEnd
+  , span
+  , break
+  , stripPrefix
+  , isPrefixOf
+  , isSuffixOf
+  , isInfixOf
+  , isSubsequenceOf
+  , elem
+  , notElem
+  , find
+  , partition
+  , lines
+  , words
+  , unlines
+  , unwords
+  , nub
+  , delete
+  , (\\)
+  , union
+  , intersect
+  , sort
+  , sortOn
+  , nubBy
+  , deleteBy
+  , deleteFirstsBy
+  , unionBy
+  , intersectBy
+  , sortBy
+  , insertBy
+  , genericLength
+  , genericTake
+  , genericDrop
+  , genericSplitAt
+  , genericReplicate
 ) where
 
-import Data.List as P(
+import Data.List (
     null
   , length
   , reverse
diff --git a/src/Papa/Base/Export/Data/List/NonEmpty.hs b/src/Papa/Base/Export/Data/List/NonEmpty.hs
--- a/src/Papa/Base/Export/Data/List/NonEmpty.hs
+++ b/src/Papa/Base/Export/Data/List/NonEmpty.hs
@@ -1,10 +1,31 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.List.NonEmpty(
-  module P
+    NonEmpty((:|))
+  , scanl
+  , scanr
+  , scanl1
+  , scanr1
+  , inits
+  , tails
+  , iterate
+  , repeat
+  , unfold
+  , insert
+  , some1
+  , group
+  , groupBy
+  , groupWith
+  , groupAllWith
+  , group1
+  , groupBy1
+  , groupWith1
+  , groupAllWith1
+  , nonEmpty
+  , xor
 ) where
 
-import Data.List.NonEmpty as P(
+import Data.List.NonEmpty (
     NonEmpty((:|))
   , scanl
   , scanr
diff --git a/src/Papa/Base/Export/Data/Maybe.hs b/src/Papa/Base/Export/Data/Maybe.hs
--- a/src/Papa/Base/Export/Data/Maybe.hs
+++ b/src/Papa/Base/Export/Data/Maybe.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Maybe(
-  module P
+    Maybe(Nothing, Just)
+  , maybe
+  , isJust
+  , isNothing
+  , fromMaybe
 ) where
 
-import Data.Maybe as P(
+import Data.Maybe (
     Maybe(Nothing, Just)
   , maybe
   , isJust
diff --git a/src/Papa/Base/Export/Data/Monoid.hs b/src/Papa/Base/Export/Data/Monoid.hs
--- a/src/Papa/Base/Export/Data/Monoid.hs
+++ b/src/Papa/Base/Export/Data/Monoid.hs
@@ -1,10 +1,16 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Monoid(
-  module P  
+    Monoid(mempty, mappend)
+  , Dual(getDual)
+  , Endo(appEndo)
+  , All(getAll)
+  , Any(getAny)
+  , Sum(getSum)
+  , Product(getProduct)
 ) where
 
-import Data.Monoid as P(
+import Data.Monoid (
     Monoid(mempty, mappend)
   , Dual(getDual)
   , Endo(appEndo)
diff --git a/src/Papa/Base/Export/Data/Ord.hs b/src/Papa/Base/Export/Data/Ord.hs
--- a/src/Papa/Base/Export/Data/Ord.hs
+++ b/src/Papa/Base/Export/Data/Ord.hs
@@ -1,10 +1,12 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Ord(
-  module P
+    Ord(compare, (<), (<=), (>), (>=), max, min)
+  , Down(Down)
+  , comparing
 ) where
 
-import Data.Ord as P(
+import Data.Ord (
     Ord(compare, (<), (<=), (>), (>=), max, min)
   , Down(Down)
   , comparing
diff --git a/src/Papa/Base/Export/Data/Ratio.hs b/src/Papa/Base/Export/Data/Ratio.hs
--- a/src/Papa/Base/Export/Data/Ratio.hs
+++ b/src/Papa/Base/Export/Data/Ratio.hs
@@ -1,10 +1,15 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Ratio(
-  module P
+    Ratio
+  , Rational
+  , (%)
+  , numerator
+  , denominator
+  , approxRational
 ) where
 
-import Data.Ratio as P(
+import Data.Ratio (
     Ratio
   , Rational
   , (%)
diff --git a/src/Papa/Base/Export/Data/Semigroup.hs b/src/Papa/Base/Export/Data/Semigroup.hs
--- a/src/Papa/Base/Export/Data/Semigroup.hs
+++ b/src/Papa/Base/Export/Data/Semigroup.hs
@@ -1,10 +1,34 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Semigroup(
-  module P
+    Semigroup((<>), sconcat, stimes)
+  , stimesMonoid
+  , stimesIdempotent
+  , stimesIdempotentMonoid
+  , mtimesDefault
+  , Min(getMin)
+  , Max(getMax)
+  , First(getFirst)
+  , Last(getLast)
+  , WrappedMonoid(unwrapMonoid)
+  , Monoid(mempty, mappend)
+  , Dual(getDual)
+  , Endo(appEndo)
+  , All(getAll)
+  , Any(getAny)
+  , Sum(getSum)
+  , Product(getProduct)
+  , Option(getOption)
+  , option
+  , diff
+  , cycle1
+  , WrappedMonoid(unwrapMonoid)
+  , Arg(Arg)
+  , ArgMin
+  , ArgMax
 ) where
 
-import Data.Semigroup as P(
+import Data.Semigroup (
     Semigroup((<>), sconcat, stimes)
   , stimesMonoid
   , stimesIdempotent
diff --git a/src/Papa/Base/Export/Data/String.hs b/src/Papa/Base/Export/Data/String.hs
--- a/src/Papa/Base/Export/Data/String.hs
+++ b/src/Papa/Base/Export/Data/String.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.String(
-  module P
+    String
+  , lines
+  , words
+  , unlines
+  , unwords
 ) where
 
-import Data.String as P(
+import Data.String (
     String
   , lines
   , words
diff --git a/src/Papa/Base/Export/Data/Traversable.hs b/src/Papa/Base/Export/Data/Traversable.hs
--- a/src/Papa/Base/Export/Data/Traversable.hs
+++ b/src/Papa/Base/Export/Data/Traversable.hs
@@ -1,10 +1,14 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Traversable(
-  module P
+    Traversable(traverse, sequenceA)
+  , for
+  , mapAccumL
+  , fmapDefault
+  , foldMapDefault
 ) where
 
-import Data.Traversable as P(
+import Data.Traversable (
     Traversable(traverse, sequenceA)
   , for
   , mapAccumL
diff --git a/src/Papa/Base/Export/Data/Void.hs b/src/Papa/Base/Export/Data/Void.hs
--- a/src/Papa/Base/Export/Data/Void.hs
+++ b/src/Papa/Base/Export/Data/Void.hs
@@ -1,10 +1,12 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Data.Void(
-  module P
+    Void
+  , absurd
+  , vacuous
 ) where
 
-import Data.Void as P(
+import Data.Void (
     Void
   , absurd
   , vacuous
diff --git a/src/Papa/Base/Export/Prelude.hs b/src/Papa/Base/Export/Prelude.hs
--- a/src/Papa/Base/Export/Prelude.hs
+++ b/src/Papa/Base/Export/Prelude.hs
@@ -1,11 +1,267 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Papa.Base.Export.Prelude(
-  module Prelude
+  --  (!!)                       Papa.Prelude.Lens.Data.List
+    Monad
+  , encodeFloat
+--, map                        Papa.Core.Data.Functor
+--, scanr                      Papa.Prelude.Semigroups.Data.List
+  , ($)
+  , Monoid 
+--, enumFrom
+--, mapM                       Papa.Core.Data.Traversable
+--, scanr1
+--, ($!) 
+--, enumFromThen
+--, mapM_                      Papa.Core.Data.Foldable
+--, seq
+  , (&&)
+  , Num 
+--, enumFromThenTo
+--, mappend                    Papa.Prelude.Semigroups.Data.List
+--, sequence                   Papa.Core.Data.Traversable
+  , (*)
+  , Ord 
+--, enumFromTo
+  , max 
+  , sequenceA
+  , (**)
+  , Ordering(
+      LT
+    , EQ
+    , GT
+    )
+--, error 
+--, maxBound
+--, sequence_                  Papa.Core.Data.Foldable
+--, (*>)                       Papa.Prelude.Semigroupoids.Data.Functor.Bind
+  , Rational
+--, errorWithoutStackTrace
+--, maximum                    Papa.Prelude.Semigroups.Data.List
+  , show
+  , (+) 
+--, Read 
+  , even 
+  , maybe 
+--, showChar
+--, (++)                       Papa.Prelude.Semigroups.Data.List
+--, ReadS 
+  , exp 
+--, mconcat                    Papa.Core.Data.Monoid
+--, showList
+  , (-) 
+  , Real 
+  , exponent
+  , mempty 
+  , showParen
+--, (.)                        Papa.Prelude.Semigroupoids.Data.Semigroupoid
+  , RealFloat
+--, fail 
+  , min 
+--, showString
+  , (/) 
+--, RealFrac
+  , filter 
+--, minBound
+  , shows
+  , (/=) 
+--, flip                       Papa.Core.Data.Functor
+--, minimum                    Papa.Prelude.Semigroups.Data.List
+  , showsPrec
+  , (<) 
+  , Show 
+  , floatDigits
+  , mod 
+  , significand
+  , (<$) 
+  , ShowS 
+  , floatRadix
+  , negate 
+  , signum
+  , (<$>)
+--, String 
+  , floatRange
+  , not 
+  , sin
+--, (<*)                       Papa.Prelude.Semigroupoids.Data.Functor.Bind
+  , Traversable
+  , floor 
+  , notElem 
+  , sinh
+  , (<*>)
+  , fmap 
+  , null 
+--, snd                        Papa.Prelude.Lens.Data.Tuple
+  , (<=)
+  , Word 
+  , foldMap 
+  , odd 
+  , span
+--, (=<<)                      Papa.Prelude.Semigroupoids.Data.Functor.Bind
+  , (^)
+  , foldl
+--, or 
+  , splitAt
+  , (==) 
+  , (^^) 
+--, foldl1                     Papa.Prelude.Semigroups.Data.List 
+  , otherwise
+  , sqrt
+  , (>) 
+  , abs 
+  , foldr 
+  , pi 
+  , subtract
+  , (>=) 
+  , acos 
+--, foldr1                     Papa.Prelude.Semigroups.Data.List
+--, pred 
+--, succ
+--, (>>)                       Papa.Prelude.Semigroupoids.Data.Functor.Apply
+  , acosh 
+--, fromEnum
+--, print 
+  , sum
+--, (>>=)                      Papa.Prelude.Semigroupoids.Data.Functor.Bind
+  , all 
+  , fromInteger
+  , product 
+--, tail                       Papa.Prelude.Lens.Data.List
+  , Applicative
+  , and 
+  , fromIntegral
+  , properFraction
+  , take
+  , Bool(
+      False
+    , True
+    ) 
+  , any 
+  , fromRational
+  , pure 
+  , takeWhile
+--, Bounded 
+  , appendFile
+--, fst                        Papa.Prelude.Lens.Data.Tuple
+  , putChar 
+  , tan
+  , Char 
+--, asTypeOf
+  , gcd 
+  , putStr 
+  , tanh
+  , Double 
+  , asin 
+  , getChar 
+  , putStrLn
+--, toEnum
+  , asinh 
+  , getContents
+  , quot 
+  , toInteger
+  , Either(
+      Left
+    , Right
+    ) 
+  , atan 
+  , getLine 
+  , quotRem 
+  , toRational
+  , Enum 
+  , atan2 
+--, head                       Papa.Prelude.Lens.Data.List 
+--, read 
+  , traverse
+  , Eq 
+  , atanh 
+--, id                         Papa.Core.Control.Category
+  , readFile
+  , truncate
+  , break 
+--, init                       Papa.Prelude.Lens.Data.List
+  , readIO 
+  , uncurry
+  , FilePath
+  , ceiling 
+  , interact
+--, readList
+--, undefined
+  , Float 
+  , compare 
+  , ioError 
+--, readLn 
+  , unlines
+  , Floating
+--, concat                     Papa.Prelude.Semigroupoids.Data.Functor.Bind
+  , isDenormalized
+--, readParen
+  , until
+  , Foldable
+--, concatMap                  Papa.Prelude.Semigroupoids.Data.Functor.Bind
+  , isIEEE 
+--, reads 
+  , unwords
+  , Fractional
+--, const                      Papa.Core.Control.Applicative
+  , isInfinite
+--, readsPrec
+--, unzip                      Papa.Core.Data.Functor
+  , Functor
+  , cos 
+  , isNaN 
+  , realToFrac
+  , unzip3
+  , cosh 
+  , isNegativeZero
+  , recip 
+--, userError
+  , IO 
+  , curry 
+--, iterate 
+  , rem 
+  , words
+  , IOError 
+  , cycle 
+--, last                       Papa.Prelude.Lens.Data.List
+--, repeat 
+  , writeFile
+  , Int 
+  , decodeFloat
+  , lcm 
+  , replicate
+  , zip
+  , Integer 
+--, div 
+--, length 
+--, return                     Papa.Core.Control.Applicative
+  , zip3
+  , Integral
+  , divMod
+--, lex 
+--, reverse                    Papa.Core.Data.List
+  , zipWith
+  , drop 
+  , lines 
+  , round 
+  , zipWith3
+  , dropWhile
+  , log 
+  , scaleFloat
+  , (||)
+  , either 
+  , logBase 
+--, scanl                      Papa.Prelude.Semigroups.Data.List
+  , Maybe(
+      Nothing
+    , Just
+    ) 
+  , elem 
+--, lookup                     Papa.Core.Data.List
+--, scanl1
 ) where
 
-import Prelude as Prelude(
---  (!!)                       Papa.Prelude.Lens.Data.List
+import Prelude (
+  --  (!!)                       Papa.Prelude.Lens.Data.List
     Monad
   , encodeFloat
 --, map                        Papa.Core.Data.Functor
diff --git a/test/doctests.hs b/test/doctests.hs
deleted file mode 100644
--- a/test/doctests.hs
+++ /dev/null
@@ -1,32 +0,0 @@
-module Main where
-
-import Build_doctests (deps)
-import Control.Applicative
-import Control.Monad
-import Data.List
-import System.Directory
-import System.FilePath
-import Test.DocTest
-
-main ::
-  IO ()
-main =
-  getSources >>= \sources -> doctest $
-      "-isrc"
-    : "-idist/build/autogen"
-    : "-optP-include"
-    : "-optPdist/build/autogen/cabal_macros.h"
-    : "-hide-all-packages"
-    : map ("-package="++) deps ++ sources
-
-getSources :: IO [FilePath]
-getSources = filter (isSuffixOf ".hs") <$> go "src"
-  where
-    go dir = do
-      (dirs, files) <- getFilesAndDirectories dir
-      (files ++) . concat <$> mapM go dirs
-
-getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath])
-getFilesAndDirectories dir = do
-  c <- map (dir </>) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir
-  (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c
