diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,2 @@
+0.1.0.0
+* Initial release
diff --git a/LICENCE b/LICENCE
new file mode 100644
--- /dev/null
+++ b/LICENCE
@@ -0,0 +1,31 @@
+Copyright (c) 2017, Commonwealth Scientific and Industrial Research Organisation
+(CSIRO) ABN 41 687 119 230.
+
+All rights reserved.
+
+Redistribution and use 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 Data61 nor the names of other
+     contributors may be used to endorse or promote products derived
+     from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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/parsers-megaparsec.cabal b/parsers-megaparsec.cabal
new file mode 100644
--- /dev/null
+++ b/parsers-megaparsec.cabal
@@ -0,0 +1,39 @@
+-- Initial parsers-megaparsec.cabal generated by cabal init.  For further documentation,
+-- see http://haskell.org/cabal/users-guide/
+
+name:                parsers-megaparsec
+version:             0.1.0.0
+synopsis:            `parsers` instances for Megaparsec
+description:         A newtype around ParsecT with instances for Parsing,
+                     CharParsing, LookAheadParsing, and TokenParsing
+extra-source-files:  ChangeLog.md
+category:            Text, Parsing
+license:             BSD3
+--                   Must be spelled with a 'C' for nix
+license-file:        LICENCE
+author:              Queensland Functional Programming Lab <oᴉ˙ldɟb@llǝʞsɐɥ>
+
+maintainer:          Queensland Functional Programming Lab <oᴉ˙ldɟb@llǝʞsɐɥ>
+homepage:            https://github.com/qfpl/parsers-megaparsec
+bug-reports:         https://github.com/qfpl/parsers-megaparsec/issues
+build-type:          Simple
+extra-source-files:  ChangeLog.md
+cabal-version:       >=1.10
+tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.3, GHC == 8.6.1
+
+source-repository    head
+  type:              git
+  location:          git@github.com:qfpl/parsers-megaparsec.git
+
+library
+  exposed-modules:     Text.Megaparsec.Parsers
+  build-depends:       base >=4.7 && <5
+                     , fail >=4.7 && <5
+                     , megaparsec ==6.*
+                     , parsers ==0.12.*
+                     , mtl >=2.2 && <2.3
+                     , semigroups >=0.9 && <0.19
+                     , text >=1.2 && <1.3
+                     , transformers >=0.4.2 && <0.6
+  hs-source-dirs:      src
+  default-language:    Haskell2010
diff --git a/src/Text/Megaparsec/Parsers.hs b/src/Text/Megaparsec/Parsers.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Megaparsec/Parsers.hs
@@ -0,0 +1,123 @@
+-- |
+-- A newtype wrapper for 'Parsec.ParsecT' that has instances of 'Parsing', 'CharParsing',
+-- 'LookAheadParsing', and 'TokenParsing'.
+--
+-- 'Parsing' and 'LookAheadParsing' have instances for any 'Stream' instance.
+--
+-- 'CharParsing' and 'TokenParsing' only have instances for 'String', strict 'Text.Text',
+-- and lazy 'Lazy.Text', because those type classes expect the 'Token' type to be 'Char'
+
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language FlexibleInstances #-}
+module Text.Megaparsec.Parsers
+  ( module Text.Parser.Combinators
+  , module Text.Parser.Char
+  , module Text.Parser.LookAhead
+  , module Text.Parser.Token
+  , ParsecT(..)
+  )
+where
+
+import Control.Applicative (Applicative, Alternative)
+import Control.Monad (MonadPlus)
+import Control.Monad.Cont.Class (MonadCont)
+import Control.Monad.Error.Class (MonadError)
+import Control.Monad.Fail (MonadFail)
+import Control.Monad.IO.Class (MonadIO)
+import Control.Monad.Reader.Class (MonadReader)
+import Control.Monad.State.Class (MonadState)
+import Control.Monad.Trans (MonadTrans)
+import Data.Monoid (Monoid)
+import Data.Functor ((<$))
+import Data.Semigroup (Semigroup)
+import Data.String (fromString)
+import Text.Megaparsec (MonadParsec, Stream, Token)
+import Text.Parser.Combinators
+import Text.Parser.Char
+import Text.Parser.LookAhead
+import Text.Parser.Token
+
+import qualified Data.List.NonEmpty as NonEmpty
+import qualified Data.Text as Text
+import qualified Data.Text.Lazy as Lazy
+import qualified Text.Megaparsec as Parsec
+import qualified Text.Megaparsec.Char as Parsec
+
+newtype ParsecT e s m a
+  = ParsecT { unParsecT :: Parsec.ParsecT e s m a }
+  deriving
+    ( Functor, Applicative, Alternative, Monad, MonadPlus
+    , MonadParsec e s, MonadError e', MonadReader r, MonadState st
+    , MonadTrans, MonadFail, MonadIO, MonadCont, Semigroup, Monoid
+    )
+
+-- | Note: 'unexpected' requires a non-empty string
+instance (Ord e, Stream s) => Parsing (ParsecT e s m) where
+  {-# inline try#-}
+  try = Parsec.try
+
+  {-# inline (<?>) #-}
+  (<?>) = (Parsec.<?>)
+
+  {-# inline notFollowedBy #-}
+  notFollowedBy = Parsec.notFollowedBy
+
+  {-# inline eof #-}
+  eof = Parsec.eof
+
+  {-# inline unexpected #-}
+  unexpected = Parsec.unexpected . Parsec.Label . NonEmpty.fromList
+
+instance Ord e => CharParsing (ParsecT e String m) where
+  {-# inline satisfy #-}
+  satisfy = Parsec.satisfy
+  {-# inline char #-}
+  char = Parsec.char
+  {-# inline notChar #-}
+  notChar = Parsec.notChar
+  {-# inline anyChar #-}
+  anyChar = Parsec.anyChar
+  {-# inline string #-}
+  string = Parsec.string
+  {-# inline text #-}
+  text t = t <$ string (Text.unpack t)
+
+-- | Lazy 'Lazy.Text'
+instance Ord e => CharParsing (ParsecT e Lazy.Text m) where
+  {-# inline satisfy #-}
+  satisfy = Parsec.satisfy
+  {-# inline char #-}
+  char = Parsec.char
+  {-# inline notChar #-}
+  notChar = Parsec.notChar
+  {-# inline anyChar #-}
+  anyChar = Parsec.anyChar
+  {-# inline string #-}
+  string t = t <$ Parsec.string (Lazy.pack t)
+  {-# inline text #-}
+  text t = t <$ Parsec.string (Lazy.fromStrict t)
+
+-- | Strict 'Text.Text'
+instance Ord e => CharParsing (ParsecT e Text.Text m) where
+  {-# inline satisfy #-}
+  satisfy = Parsec.satisfy
+  {-# inline char #-}
+  char = Parsec.char
+  {-# inline notChar #-}
+  notChar = Parsec.notChar
+  {-# inline anyChar #-}
+  anyChar = Parsec.anyChar
+  {-# inline string #-}
+  string t = t <$ Parsec.string (Text.pack t)
+  {-# inline text #-}
+  text = Parsec.string
+
+instance (Ord e, Stream s) => LookAheadParsing (ParsecT e s m) where
+  {-# inline lookAhead #-}
+  lookAhead = Parsec.lookAhead
+
+instance Ord e => TokenParsing (ParsecT e String m)
+-- | Lazy 'Lazy.Text'
+instance Ord e => TokenParsing (ParsecT e Text.Text m)
+-- | Strict 'Text.Text'
+instance Ord e => TokenParsing (ParsecT e Lazy.Text m)
