diff --git a/looksee.cabal b/looksee.cabal
--- a/looksee.cabal
+++ b/looksee.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.37.0.
+-- This file has been generated from package.yaml by hpack version 0.38.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           looksee
-version:        0.8.0
+version:        0.8.1
 synopsis:       A simple text parser with decent errors
 description:    Please see the README on GitHub at <https://github.com/ejconlon/looksee#readme>
 category:       Parsing
@@ -29,6 +29,7 @@
   exposed-modules:
       Looksee
       Looksee.Examples
+      Looksee.Lexer
   other-modules:
       Paths_looksee
   hs-source-dirs:
diff --git a/src/Looksee/Lexer.hs b/src/Looksee/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/src/Looksee/Lexer.hs
@@ -0,0 +1,74 @@
+-- | Adaptor layer for porting from 'Text.Megaparser.Char.Lexer'.
+module Looksee.Lexer
+  ( space
+  , lexeme
+  , symbol
+  , symbol_
+  , skipLineComment
+  , skipBlockComment
+  )
+where
+
+import Control.Monad (void)
+import Data.Text (Text)
+import Looksee (ParserT, altP, breakP, dropAllP, dropWhileP, optP, textP, textP_)
+
+space
+  :: (Monad m)
+  => ParserT e m ()
+  -- ^ A parser for space characters which does not accept empty (e.g. 'space1P')
+  -> ParserT e m ()
+  -- ^ A parser for a line comment (e.g. 'skipLineComment')
+  -> ParserT e m ()
+  -- ^ A parser for a block comment (e.g. 'skipBlockComment')
+  -> ParserT e m ()
+space sp line block =
+  let p = optP (altP [sp, line, block])
+      go = p >>= \case Nothing -> pure (); Just _ -> go
+  in  go
+
+lexeme
+  :: ParserT e m ()
+  -- ^ How to consume white space after lexeme
+  -> ParserT e m a
+  -- ^ How to parse actual lexeme
+  -> ParserT e m a
+lexeme spc p = p <* spc
+
+symbol
+  :: (Monad m)
+  => ParserT e m ()
+  -- ^ How to consume white space after lexeme
+  -> Text
+  -- ^ Symbol to parse
+  -> ParserT e m Text
+symbol spc = lexeme spc . textP
+
+symbol_
+  :: (Monad m)
+  => ParserT e m ()
+  -- ^ How to consume white space after lexeme
+  -> Text
+  -- ^ Symbol to parse
+  -> ParserT e m ()
+symbol_ spc = lexeme spc . textP_
+
+skipLineComment
+  :: (Monad m)
+  => Text
+  -- ^ Line comment prefix
+  -> ParserT e m ()
+skipLineComment start = do
+  textP_ start
+  void (dropWhileP (/= '\n'))
+
+skipBlockComment
+  :: (Monad m)
+  => Text
+  -- ^ Start of block comment
+  -> Text
+  -- ^ End of block comment
+  -> ParserT e m ()
+skipBlockComment start end = do
+  textP_ start
+  void (breakP end dropAllP)
