diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,5 @@
+# Revision history for coerce-util
+
+## 0.1.0.0  -- YYYY-mm-dd
+
+* First version. Released on an unsuspecting world.
diff --git a/Data/Coerce/Util.hs b/Data/Coerce/Util.hs
new file mode 100644
--- /dev/null
+++ b/Data/Coerce/Util.hs
@@ -0,0 +1,108 @@
+module Data.Coerce.Util
+  (
+    -- * Function coercion utils
+    (#.)
+  , (.#)
+
+    -- * Shorten coercion type signatures
+  , Binary
+  , CoerceBinary
+  , WrapBinary
+  , WrappedBinary
+    
+    -- * Newtype utils 
+  , showsNewtype
+  , readsNewtype
+  ) where
+
+import Data.Coerce
+
+import Text.Read
+import Text.Read.Lex
+
+-- | A definition for 'Data.Functor.Classes.liftShowsPrec',
+-- suitable for newtypes.
+--
+-- Given a newtype declared as:
+--
+-- @newtype T a = T { unT :: a }@
+--
+-- The 'Data.Functor.Classes.Show1' definition can be given as:
+--
+-- @
+-- instance Show1 T where
+--   liftShowsPrec = showsNewtype "T" "unT"
+-- @
+showsNewtype
+  :: Coercible b a
+  => String
+  -> String
+  -> (Int -> a -> ShowS)
+  -> ([a] -> ShowS)
+  -> Int
+  -> b
+  -> ShowS
+showsNewtype cons acc = s
+  where
+    s sp _ n x =
+        showParen (n > 10)
+      $ showString cons
+      . showString " {"
+      . showString acc
+      . showString " = "
+      . sp 0 (coerce x)
+      . showChar '}'
+{-# INLINE showsNewtype #-}
+
+-- | A definition for 'Data.Functor.Classes.liftReadsPrec',
+-- suitable for newtypes.
+--
+-- Given a newtype declared as:
+--
+-- @
+-- newtype T a = T { unT :: a }
+-- @
+--
+-- The 'Data.Functor.Classes.Read1' definition can be given as:
+--
+-- @
+-- instance Read1 T where
+--   liftReadsPrec = readsNewtype "T" "unT"
+-- @
+readsNewtype
+  :: Coercible a b
+  => String
+  -> String
+  -> (Int -> ReadS a)
+  -> ReadS [a]
+  -> Int
+  -> ReadS b
+readsNewtype cons acc = r
+  where
+    r rp _ = readPrec_to_S $ parens $ prec 10 $ do
+      lift $ expect (Ident cons)
+      Punc "{" <- lexP
+      lift $ expect (Ident acc)
+      Punc "=" <- lexP
+      x <- reset (readS_to_Prec rp)
+      Punc "}" <- lexP
+      pure (coerce x)
+{-# INLINE readsNewtype #-}
+
+type Binary a = a -> a -> a
+type CoerceBinary a b = Binary a -> Binary b
+type WrapBinary f a = Binary a -> WrappedBinary f a
+type WrappedBinary f a = Binary (f a)
+
+-- | Coercive left-composition.
+infixr 9 #.
+(#.) :: Coercible b c => (b -> c) -> (a -> b) -> a -> c
+(#.) _ = coerce
+{-# INLINE (#.) #-}
+
+-- | Coercive right-composition.
+infixr 9 .#
+(.#) :: Coercible a b => (b -> c) -> (a -> b) -> a -> c
+(.#) f _ = coerce f
+{-# INLINE (.#) #-}
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2018 chessai
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN 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/coerce-util.cabal b/coerce-util.cabal
new file mode 100644
--- /dev/null
+++ b/coerce-util.cabal
@@ -0,0 +1,19 @@
+name:                coerce-util
+version:             0.1.0.0
+synopsis:            utils for Data.Coerce
+description:         This library provides some convenience utilities for working with 'Data.Coerce'.
+homepage:            https://github.com/chessai/coerce-util.git
+license:             MIT
+license-file:        LICENSE
+author:              chessai
+maintainer:          chessai1996@gmail.com
+copyright:           2018 (C) chessai
+category:            Data
+build-type:          Simple
+extra-source-files:  ChangeLog.md
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     Data.Coerce.Util 
+  build-depends:       base >=4.9 && <5
+  default-language:    Haskell2010
