diff --git a/protolude.cabal b/protolude.cabal
--- a/protolude.cabal
+++ b/protolude.cabal
@@ -1,5 +1,5 @@
 name:                protolude
-version:             0.1.3
+version:             0.1.4
 synopsis:            A sensible set of defaults for writing custom Preludes.
 description:         A sensible set of defaults for writing custom Preludes.
 homepage:            https://github.com/sdiehl/protolude
@@ -50,10 +50,12 @@
   default-extensions:
     NoImplicitPrelude
     OverloadedStrings
+    FlexibleContexts
     MultiParamTypeClasses
 
   ghc-options:
     -Wall
+    -fwarn-implicit-prelude
 
   build-depends:       
     base             >= 4.6  && <4.10,
diff --git a/src/Base.hs b/src/Base.hs
--- a/src/Base.hs
+++ b/src/Base.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE Unsafe #-}
 {-# LANGUAGE BangPatterns #-}
+{-# LANGUAGE ExplicitNamespaces #-}
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Base (
@@ -49,6 +50,23 @@
   , Coercible
 #endif
   )
+
+#if ( __GLASGOW_HASKELL__ >= 800 )
+import GHC.OverloadedLabels as X (
+    IsLabel(..)
+  )
+
+{-
+import GHC.Records as X (
+    HasField(..)
+  )
+-}
+
+import Data.Kind as X (
+    type (*)
+  , type Type
+  )
+#endif
 
 infixr 0 $!
 
diff --git a/src/Monad.hs b/src/Monad.hs
--- a/src/Monad.hs
+++ b/src/Monad.hs
@@ -3,7 +3,7 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Monad (
-    Monad(..)
+    Monad((>>=), return)
   , MonadPlus(..)
 
   , (=<<)
@@ -48,7 +48,7 @@
 import Control.Monad
 #endif
 
-concatMapM :: (Monad m) => (a -> m [b]) -> [a] -> m [b]
+concatMapM :: Monad m => (a -> m [b]) -> [a] -> m [b]
 concatMapM f xs = liftM concat (mapM f xs)
 
 liftM' :: Monad m => (a -> b) -> m a -> m b
diff --git a/src/Protolude.hs b/src/Protolude.hs
--- a/src/Protolude.hs
+++ b/src/Protolude.hs
@@ -1,16 +1,19 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE Trustworthy #-}
 {-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE ExplicitNamespaces #-}
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 module Protolude (
   module X,
   module Base,
   identity,
+  map,
   (&),
   uncons,
   applyN,
   print,
+  show,
 
   LText,
   LByteString,
@@ -29,9 +32,13 @@
     putStr
   , putStrLn
   , print
+  , show
   )
 import qualified Base as PBase
 
+-- Used for 'show'
+import Data.String (String)
+
 -- Maybe'ized version of partial functions
 import Safe as X (
     headMay
@@ -68,7 +75,6 @@
 -- Base typeclasses
 import Data.Eq as X
 import Data.Ord as X
-import Data.Monoid as X
 import Data.Traversable as X
 import Data.Foldable as X hiding (
     foldr1
@@ -77,6 +83,13 @@
 import Data.Semiring as X
 import Data.Functor.Identity as X
 
+#if ( __GLASGOW_HASKELL__ >= 800 )
+import Data.Monoid as X hiding ((<>))
+import Data.Semigroup as X ( Semigroup(..) )
+#else
+import Data.Monoid as X
+#endif
+
 #if (__GLASGOW_HASKELL__ >= 710)
 import Data.Bifunctor as X (Bifunctor(..))
 #else
@@ -123,6 +136,7 @@
   , zipWith
   , zip
   )
+
 import Data.Map as X (Map)
 import Data.Set as X (Set)
 import Data.Sequence as X (Seq)
@@ -134,6 +148,28 @@
     Proxy(..)
   )
 
+import Data.Typeable as X (
+    TypeRep
+  , Typeable
+  , typeRep
+  , cast
+  , eqT
+  )
+
+import Data.Type.Coercion as X (
+    Coercion(..)
+  , coerceWith
+  )
+
+import Data.Type.Equality as X (
+    (:~:)(..)
+  , type (==)
+  , sym
+  , trans
+  , castWith
+  , gcastWith
+  )
+
 import Data.Void as X (
     Void
   , absurd
@@ -192,11 +228,11 @@
 import Data.Int as X
 import Data.Bits as X
 import Data.Word as X
-import Data.Bool as X hiding (bool)
-import Data.Char as X (chr)
-import Data.Maybe as X hiding (fromJust)
 import Data.Either as X
 import Data.Complex as X
+import Data.Char as X (chr)
+import Data.Bool as X hiding (bool)
+import Data.Maybe as X hiding (fromJust)
 
 import Data.Function as X (
     const
@@ -208,7 +244,7 @@
   )
 
 -- Genericss
-import GHC.Generics (
+import GHC.Generics as X (
     Generic(..)
   , Rep
   , K1(..)
@@ -224,6 +260,9 @@
   , Constructor(..)
   , Selector(..)
   , Fixity(..)
+#if ( __GLASGOW_HASKELL__ >= 800 )
+  , Meta(..)
+#endif
   )
 
 -- ByteString
@@ -261,10 +300,7 @@
 import System.Exit as X
 --import System.Info as X
 import System.Environment as X (getArgs)
-import System.IO as X (
-    Handle
-  , hClose
-  )
+import System.IO as X (Handle)
 
 -- ST
 import Control.Monad.ST as X
@@ -297,6 +333,9 @@
 identity :: a -> a
 identity x = x
 
+map :: Functor f => (a -> b) -> f a -> f b
+map = fmap
+
 uncons :: [a] -> Maybe (a, [a])
 uncons []     = Nothing
 uncons (x:xs) = Just (x, xs)
@@ -306,3 +345,9 @@
 
 print :: (X.MonadIO m, PBase.Show a) => a -> m ()
 print = liftIO . PBase.print
+
+show :: (Show a, StringConv String b) => a -> b
+show x = toS (PBase.show x)
+{-# SPECIALIZE show :: Show  a => a -> String  #-}
+{-# SPECIALIZE show :: Show  a => a -> Text  #-}
+{-# SPECIALIZE show :: Show  a => a -> LText  #-}
