diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for S-expresso
 
+Version 1.2.0.0
+---------------
+* Update to stack lts 18.10
+* Thanks to Ollie Charles from asking for this update
+
 Version 1.1.0.0
 ---------------
 
diff --git a/sexpresso.cabal b/sexpresso.cabal
--- a/sexpresso.cabal
+++ b/sexpresso.cabal
@@ -1,13 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.2.
+-- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: cd4a5d89acd75970af22375142f81c7b7320e72ae7403de680177c6ad12e1116
 
 name:           sexpresso
-version:        1.1.0.0
+version:        1.2.0.0
 synopsis:       A flexible library for parsing and printing S-expression
 description:    Please see the README on GitHub at <https://github.com/archambaultv/sexpresso#readme>
 category:       Data
@@ -44,10 +42,10 @@
   ghc-options: -Wall
   build-depends:
       base >=4.7 && <5
-    , bifunctors >=5.5 && <5.6
+    , bifunctors ==5.5.*
     , containers >=0.5 && <0.7
-    , megaparsec >=7.0 && <=8.0.0
-    , recursion-schemes >=5.1 && <5.2
+    , megaparsec >=7.0 && <9.1.0
+    , recursion-schemes >=5.1 && <5.3
     , text >=0.2 && <1.3
   default-language: Haskell2010
 
@@ -65,10 +63,10 @@
   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N
   build-depends:
       base >=4.7 && <5
-    , bifunctors >=5.5 && <5.6
+    , bifunctors ==5.5.*
     , containers >=0.5 && <0.7
-    , megaparsec >=7.0 && <=8.0.0
-    , recursion-schemes >=5.1 && <5.2
+    , megaparsec >=7.0 && <9.1.0
+    , recursion-schemes >=5.1 && <5.3
     , sexpresso
     , smallcheck >=1.0
     , tasty >=0.8
diff --git a/src/Data/SExpresso/Parse/Generic.hs b/src/Data/SExpresso/Parse/Generic.hs
--- a/src/Data/SExpresso/Parse/Generic.hs
+++ b/src/Data/SExpresso/Parse/Generic.hs
@@ -109,7 +109,7 @@
 getAtom (SExprParser _ _ a _ _) = a
 
 -- | The 'withLocation' function adds source location to a @'SExprParser'@. See also 'Location'.
-withLocation :: (MonadParsec e s m) => SExprParser m b a -> SExprParser m (Located b) (Located a)
+withLocation :: (MonadParsec e s m, TraversableStream s) => SExprParser m b a -> SExprParser m (Located b) (Located a)
 withLocation (SExprParser pSTag pETag atom sp sr) =
   let s = do
         pos <- getSourcePos
@@ -251,10 +251,10 @@
     (_, SList _ _, _) -> True
     (SAtom a1, SAtom a2, _) -> getSpacingRule' a1 a2 == SOptional
 
-sepEndBy' :: (MonadParsec e s m) => m (SExpr b a) -> m () -> (a -> a -> SpacingRule) -> m [SExpr b a]
+sepEndBy' :: (MonadParsec e s m, TraversableStream s) => m (SExpr b a) -> m () -> (a -> a -> SpacingRule) -> m [SExpr b a]
 sepEndBy' p sep f = sepEndBy1' p sep f <|> pure []
 
-sepEndBy1' :: (MonadParsec e s m) => m (SExpr b a) -> m () -> (a -> a -> SpacingRule) -> m [SExpr b a]
+sepEndBy1' :: (MonadParsec e s m, TraversableStream s) => m (SExpr b a) -> m () -> (a -> a -> SpacingRule) -> m [SExpr b a]
 sepEndBy1' p sep f = do
   x <- p
   xs <- parseContent x
@@ -275,7 +275,7 @@
                          "A space was expected at " <> sourcePosPretty (fromJust mpos)) mzero
 
 -- | The 'parseSExprList' function return a parser for parsing S-expression of the form @'SList' _ _@.
-parseSExprList :: (MonadParsec e s m) =>
+parseSExprList :: (MonadParsec e s m, TraversableStream s) =>
                 SExprParser m b a -> m (SExpr b a)
 parseSExprList def@(SExprParser pSTag pETag _ sp sr)  = do
           c <- pSTag
@@ -287,7 +287,7 @@
 -- | The 'parseSExpr' function return a parser for parsing
 -- S-expression ('SExpr'), that is either an atom (@'SAtom' _@) or a
 -- list @'SList' _ _@. See also 'decodeOne' and 'decode'.
-parseSExpr :: (MonadParsec e s m) =>
+parseSExpr :: (MonadParsec e s m, TraversableStream s) =>
               SExprParser m b a -> m (SExpr b a)
 parseSExpr def = (getAtom def >>= return . SAtom) <|> (parseSExprList def)
 
@@ -295,7 +295,7 @@
 -- containing only one S-expression ('SExpr'). It can parse extra
 -- whitespace at the beginning and at the end of the file. See also
 -- 'parseSExpr' and 'decode'.
-decodeOne :: (MonadParsec e s m) => SExprParser m b a -> m (SExpr b a)
+decodeOne :: (MonadParsec e s m, TraversableStream s) => SExprParser m b a -> m (SExpr b a)
 decodeOne def =
   let ws = getSpace def
   in optional ws *> parseSExpr def <* (optional ws >> eof)
@@ -304,7 +304,7 @@
 -- containing many S-expression ('SExpr'). It can parse extra
 -- whitespace at the beginning and at the end of the file. See also
 -- 'parseSExpr' and 'decodeOne'.
-decode :: (MonadParsec e s m) => SExprParser m b a -> m [SExpr b a]
+decode :: (MonadParsec e s m, TraversableStream s) => SExprParser m b a -> m [SExpr b a]
 decode def =
   let ws = getSpace def
   in optional ws *> sepEndBy' (parseSExpr def) ws (getSpacingRule def) <* eof
diff --git a/src/Data/SExpresso/Parse/Location.hs b/src/Data/SExpresso/Parse/Location.hs
--- a/src/Data/SExpresso/Parse/Location.hs
+++ b/src/Data/SExpresso/Parse/Location.hs
@@ -42,7 +42,7 @@
                deriving (Eq, Ord, Show, Functor)
 
 -- | The 'located' function adds a source span to a parser.
-located :: (MonadParsec e s m) => m a -> m (Located a)
+located :: (MonadParsec e s m, TraversableStream s) => m a -> m (Located a)
 located parser = do
   begin <- getSourcePos
   result <- parser
